我有一个使用dlopen(带有标志RTLD_NOW | RTLD_GLOBAL)加载的共享库.如果此库正在使用主程序中的函数,则它不会卸载.所以我最终得到了这个共享库的相同代码,即使我卸载(使用dlclose),更改,编译,(重新)加载它.
我的目标实际上是在对其进行更改后重新加载相同的库,这样我就不必重新启动整个程序来测试我的代码.
我在Linux Ubuntu 10.04上使用g ++ 4.2.3.
(编辑)
解决了:
"由于RTLD_GLOBAL,"加载的库使用符号".实际上,我在链接时嵌入了另一个.a嵌入的符号,可能会被回调并阻止我的库关闭...我认为可以使用dlopen(...,RTLD_NOLOAD)验证是否已卸载lib以检出库已正确卸载.