Использование динамических библиотек
g++ -fPIC -c igate.cpp -o igate.o
g++ -shared -o libigate.so igate.o
В результате получил библиотеку:
libigate.so
Теперь пытаюсь её использовать:
1. сначало подгружаю её используя dlopen(libname, flags). Библиотека подгружается без
проблем никаких ошибок.
2. Но вот когда пытаю получить указатель функции, получаю ошибки, например:
после выполнения dlsym(hGate, "httplookup") - dlerror возвращает: "./libigate.so: undefined symbol httplookup". И такая проблема с любой функцией.
----------------------------------------------
Попробовал даже для проверки простенькую тестовую библиотеку написать:
типа:
1. testdl.cpp:
int tester(int i) { return i; }
2. g++ -fPIC -c testdl.cpp -o testdl.o
g++ -shared -o libtestdl.so testdl.o
3. уже в программе:
hLib = dlopen("./libtestdl.so", RTLD_LAZY);
lpfnTester = dlsym(hLib, "tester");
И опять та же фигня: ./libtestdl.so: undefined symbol tester
--------------------------------------------------
Как же тогда имена функций указывать надо?
Или может я библиотку не правильно собираю...
компилер ++, а объявление экспортируемой ф-ции extern "C" содержит?
Добавил, extern "C" - заработало.
------------------------------------
Сейчас только остались проблемы с функциями включеннными в пространства имён (namespace). Для них как имена указывать не понятно - возможно придётся избавляться от использования пространств имён.