【问题标题】:QLibrary load with -rpath使用 -rpath 加载 QLibrary
【发布时间】:2017-06-11 00:06:36
【问题描述】:

我有一个动态加载 B.so 的可执行文件 A,而 B.so 又依赖于 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 一起使用吗?

【问题讨论】:

    标签: linux qt ldd rpath qlibrary


    【解决方案1】:

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

    【讨论】:

    • 我答错了; rpath 指向目录,.so 文件以绝对路径提供给链接器。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-24
      • 2017-04-20
      • 2016-05-29
      • 2016-10-27
      • 2015-12-22
      相关资源
      最近更新 更多