首页 > 解决方案 > 为什么递归 ld rpath 的应用程序不起作用?

问题描述

我的可执行文件oom(递归)需要一个共享库libvpncli.so,而共享库又需要libvpnapi.so.

当我尝试链接oom时,我得到了这个:

/usr/bin/ld: warning: libvpnapi.so, needed by /path/to/libvpncli.so, not found

但是,使用选项libvpncli.so正确编译-rpath以知道如何查找libvpnapi.so. 我手动检查了这个,并ldd显示了它:

$ldd /path/to/libvpncli.so
libvpnapi.so => /path/to/libvpnapi.so

那为什么ld找不到oomlibvpnapi.so

编辑 - 回答 nm 的观点:

“指定运行时路径”

在链接期间也使用No.rpath来检查所有符号是否都将被解析。无论如何,我在这个问题中不是在谈论运行时,而是在谈论链接。

事实上,如果我rpath直接添加到oom链接线以指向libvpnapi.so,警告就会消失。

但我不想这样做(出于其他原因)。相反,我需要了解为什么上述_does_not_ 有效。

“在链接 oom 时,必须在命令行中使用 -rpath 或(也许更好)-rpath-link 指定其目录”

不。在不同的系统上,上述方案确实有效,无需直接-rpathoom链接线上指定,而是间接递归地工作。

我的问题是,为什么它在每个系统上都不总是有效?如我的问题所示,当有证据表明它应该起作用时,它不起作用的原因可能是什么。

标签: ld

解决方案


推荐阅读