【发布时间】:2012-07-31 16:00:23
【问题描述】:
我有一个可执行文件 A,它使用 dlopen 打开共享库 libB.so(位于同一目录中,因此我执行 LD_LIBRARY_PATH=. 以让我的程序正确找到它)。这个库 libB.so 应该在 libC.so 中找到它的一些符号,它也位于同一目录中。
但是,/usr/lib64 中还有一个 libC.so(它已使用不同的参数编译,因此它没有相同的符号),并且由于未知原因,libB.so 试图打开这个在同一目录中的那个。当我执行ldd libB.so 时,我可以看到libC.so => /usr/lib64/libC.so 而不是libC.so => /path/to/program/A/libC.so。
有没有办法在 libB.so 中更改此链接(如果可能,无需重新编译),或者如果我应该重新编译 libB.so,是什么让编译器选择在 /usr/lib64 中使用 libC.so 而不是其他一个?
(注意:替换 /usr/lib64 中的 libC.so 不是一个选项,因为我不是平台的管理员)
谢谢
【问题讨论】: