1. Мне нужно содать что-то вроде DLL - скомпилированный файл, который хранит набор функций. Моя программа на C++ должна во время выполнения подключаться к этому файлу и запускать ее функции. Пожскажите в каком направлении копать?2. Так же хотел бы узнать: можно ли в эти DLL записывать не просто функции, а целые объекты со своими свойствами и методами?
man 3 dlopen
Допустим есть заголовочник 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", проблем с декарацией имен уже не будет.
надеюсь, идея понятна.
>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", проблем с декарацией имен уже не будет.
надеюсь, идея понятна.