У меня проблемы с выяснением, как выполнить следующее:
1) Load in a library from libraryA.so,
2) Call the 'main' function
3) Unload the library.
В частности, я не могу заставить шаг 3 работать надежно.
Моя библиотека LibraryA была скомпилирована следующим образом:
g++ libraryA.c -o libraryA.so -shared -llibraryB
Вот что происходит, когда я загружаю библиотеку A:
void* libA = dlopen("./libraryA.so", RTLD_NOW | RTLD_DEEPBIND)
Приведенная выше команда загружается в libraryA из "libraryA.so", который, в свою очередь, загружает libraryB из "/usr/local/lib/libraryB.so".
Однако, похоже, существует циклическая зависимость между libraryA и libraryB. (Возможно, из-за использования виртуальных функций.) Запуск с параметром "LD_DEBUG = bindings" показывает такие вещи, как:
binding file ./libraryA.so [0] to /usr/local/lib/libraryB.so [0]: normal symbol `_ZN55ArrayLJKiLi1EFD2Ef'
...
binding file /usr/local/lib/libraryB.so [0] to ./libraryA.so [0]: normal symbol `_ZN55ArrayIKiLi1EED1Ev'
Из-за этой циклической зависимости libraryA не будет загружаться, когда я вызываю dlclose. Есть ли способы обойти это? Могу ли я в любом случае заставить библиотеку вместе со всеми автоматически загруженными зависимостями выгружаться вместе?
Большое спасибо,
Patrick