URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 6040
[ Назад ]

Исходное сообщение
"Аналог DLL в Unix"

Отправлено Flex25 , 25-Дек-06 11:44 
1. Мне нужно содать что-то вроде DLL - скомпилированный файл, который хранит набор функций. Моя программа на C++ должна во время выполнения подключаться к этому файлу и запускать ее функции. Пожскажите в каком направлении копать?

2. Так же хотел бы узнать: можно ли в эти DLL записывать не просто функции, а целые объекты со своими свойствами и методами?


Содержание

Сообщения в этом обсуждении
"Аналог DLL в Unix"
Отправлено GrimObserver , 25-Дек-06 12:29 
man 3 dlopen

"Аналог DLL в Unix"
Отправлено sandy , 26-Дек-06 14:00 
Допустим есть заголовочник myfunc, где функции объявлены, и myfunc.cc, где написаны тела функций

Компилируем:
# g++ -c -fPIC -o myfunc.o myfunc.cc
# g++ -c -shared -o mufinc.so myfunc.o

Вроде бы так. Это под FreeBSD
Если это на C++, не забудь про extern "C"



"Аналог DLL в Unix"
Отправлено sandy , 26-Дек-06 14:11 
>2. Так же хотел бы узнать: можно ли в эти DLL записывать
>не просто функции, а целые объекты со своими свойствами и методами?
>

Это цитата, но не помню откуда, вроде бы с этого же форума:

---lib.h---
class foo {
public :
    foo();
    virtual ~foo();
};

extern "C" {
class foo *create_foo();
void delete_foo(class foo *);
};
---lib.h---

---lib.cc---
#include "lib.h"

class foo * create_foo() {
    return new foo();
}

void delete_foo(class foo *foo_) {
    delete foo_;
}
---lib.cc---

из своего приложения импортируете create_foo/delete_foo и через них
создаете/удаляете экземпляры класса. за счет того, что функции доступа
объявлены как "C", проблем с декарацией имен уже не будет.
надеюсь, идея понятна.


"Аналог DLL в Unix"
Отправлено sandy , 26-Дек-06 14:03 
>1. Мне нужно содать что-то вроде DLL - скомпилированный файл, который хранит
>набор функций. Моя программа на C++ должна во время выполнения подключаться
>к этому файлу и запускать ее функции. Пожскажите в каком направлении
>копать?

Допустим есть заголовочник myfunc, где функции объявлены, и myfunc.cc, где написаны тела функций

Компилируем:
# g++ -c -fPIC -o myfunc.o myfunc.cc
# g++ -c -shared -o mufinc.so myfunc.o

Вроде бы так. Это под FreeBSD
Если это на C++, не забудь про extern "C"

>2. Так же хотел бы узнать: можно ли в эти DLL записывать
>не просто функции, а целые объекты со своими свойствами и методами?
>

Это цитата, но не помню откуда, вроде бы с этого же форума:

---lib.h---
class foo {
public :
    foo();
    virtual ~foo();
};

extern "C" {
class foo *create_foo();
void delete_foo(class foo *);
};
---lib.h---

---lib.cc---
#include "lib.h"

class foo * create_foo() {
    return new foo();
}

void delete_foo(class foo *foo_) {
    delete foo_;
}
---lib.cc---

из своего приложения импортируете create_foo/delete_foo и через них
создаете/удаляете экземпляры класса. за счет того, что функции доступа
объявлены как "C", проблем с декарацией имен уже не будет.
надеюсь, идея понятна.