我的可执行文件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
的{{1}}找不到oom
?
编辑-回答下午的要点:
“指定运行时路径”
不。链接期间也使用libvpnapi.so
来检查所有符号是否都可以解析。无论如何,我不是在这个问题中谈论运行时,而是在链接。
的确,如果我将rpath
直接添加到rpath
链接行以指向oom
,该警告将消失。
但是我不想这样做(由于其他原因)。相反,我需要了解为什么上面的_does_not_起作用。
“链接oom时,必须在命令行中使用-rpath或(也许更好)-rpath-link指定其目录”
不。在不同的系统上,上面的方案确实有效,没有在libvpnapi.so
链接行上直接指定-rpath
,而是间接,递归地工作。
我的问题是,为什么在每个系统上总是都不起作用?如我的问题所示,当证据表明它不起作用时,它为什么不起作用的原因可能是什么。