我在弄清楚如何完成以下任务时遇到了麻烦:
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
这是我加载libraryA时发生的事情:
void* libA = dlopen("./libraryA.so", RTLD_NOW | RTLD_DEEPBIND)
以上命令从“ libraryA.so”加载到libraryA中,该库又从“ /usr/local/lib/libraryB.so”加载到libraryB中。
但是,在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'
由于这种循环依赖性,我调用dlclose时不会加载libraryA。有什么办法解决吗?无论如何,我是否可以强制将库及其自动拉入的所有依赖项一起卸载?
非常感谢您,
帕特里克