使用dlopen加载的库不会dlclose

时间:2019-06-08 23:45:22

标签: c++ linux dlopen

我在弄清楚如何完成以下任务时遇到了麻烦:

  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。有什么办法解决吗?无论如何,我是否可以强制将库及其自动拉入的所有依赖项一起卸载?

非常感谢您,

帕特里克

0 个答案:

没有答案