1

我有一个动态加载 B.so 的可执行文件 A,它又依赖于 C.so。C.so 与 A 和 B 不在同一个文件夹中。

我正在尝试使用 QLibrary.load() 加载 B.so,但由于 QLibrary.errorString() 返回库 C.so 无法加载而未能这样做。

QLibrary 文档说可以使用 LD_LIBRARY_PATH,但我不想这样做。我在链接 B.so 时使用 -Wl,-rpath,/path/to/C/,但它对动态加载没有帮助。

关于如何在不使用 LD_LIBRARY_PATH 的情况下加载 B.so 的任何建议?我可以让它与-rpath一起工作吗?

4

2 回答 2

0

rpath 应该指向一个目录而不是共享对象文件,尝试-Wl,-rpath,/path/to/而不是-Wl,-rpath,/path/to/C.so

于 2017-01-26T05:08:09.620 回答
0

问题是 rpath 实际上没有被修改。

我使用 ldd 检查共享对象文件是否实际被加载,而它们没有。然后我用了readelf -b,发现RPATH不正确。

于 2017-01-26T08:27:43.963 回答