ld - 为什么递归 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
找不到oom
呢libvpnapi.so
?
编辑 - 回答 nm 的观点:
“指定运行时路径”
在链接期间也使用No.rpath
来检查所有符号是否都将被解析。无论如何,我在这个问题中不是在谈论运行时,而是在谈论链接。
事实上,如果我rpath
直接添加到oom
链接线以指向libvpnapi.so
,警告就会消失。
但我不想这样做(出于其他原因)。相反,我需要了解为什么上述_does_not_ 有效。
“在链接 oom 时,必须在命令行中使用 -rpath 或(也许更好)-rpath-link 指定其目录”
不。在不同的系统上,上述方案确实有效,无需直接-rpath
在oom
链接线上指定,而是间接递归地工作。
我的问题是,为什么它在每个系统上都不总是有效?如我的问题所示,当有证据表明它应该起作用时,它不起作用的原因可能是什么。
解决方案
推荐阅读
- magento - 未找到 Magento 1.9 自定义模块类
- dataframe - 如何在 pyspark 中的数据框中使用两列过滤日期(两个日期之间)
- google-cloud-platform - Google Cloud SDK 安装失败,错误 307 暂时移动
- python - 查找分组数据框中的最大计数
- python - 如何从仅包含数字的文本文件制作 wav 文件?
- javascript - Backbone/Marionette - 如何从外部服务器获取集合数据?
- php - 创建链接实体时删除 Symfony 实体
- javascript - 使用动态参数绑定方法
- regex - 如何使用 sed 删除特殊字符
- timeout - Artifactory 随机响应缓慢