问题标签 [rpath]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
boost - 如何将 CMake RPath 用于 boost.Python
我正在使用 Boost.Python 在 C++ 中编写 Python 扩展模块。但是,我想使用比系统安装提供的更新版本的 Boost 库。这个较新版本的 boost 包含在
BOOST_ROOT=$HOME/opt/boost/1.55.0
.
按照这篇关于如何在 CMake 中使用 RPath 的指南,我想出了以下内容CMakeLists.txt
。
然后我运行以下命令来构建模块
运行后的状态消息cmake
指向正确的 boost 安装。(CMake boost 模块获取环境变量
$BOOST_ROOT
)即 CMake 变量Boost_LIBARIES
指向
$BOOST_ROOT/lib/libboost_python.so
.
但是,如果我检查实际会使用哪些库,则会列出系统库:
这是 1.53 版,尽管上面的状态消息明确指向 1.55。
我究竟做错了什么?我怎样才能让 ldd 选择图书馆
$BOOST_ROOT/lib/libboost_python.so.1.55.0
?
c - 如何在不包含任何构建路径的情况下设置 gcc RPATH?
我需要使用 gcc 为 RHEL4 构建一个 wget 不完整的可执行文件,它将使用特定的 OpenSSL 共享库。LD_LIBRARY_PATH 在构建时未设置。
通过指定以下内容非常简单:
一切都很好。
但这使得 RPATH 在我不完整的可执行文件的动态部分中:
是否可以使用 gcc 工具链将 RPATH 设置为仅使用使用 -rpath 选项指定的内容并忽略构建时声明的所有库路径?
我今天看了很多 SO 帖子,包括:
我不明白 -Wl,-rpath -Wl , 和 -rpath 和 -L 有什么区别?
但似乎没有什么可以解决从最终不完整的可执行文件中删除构建信息的问题。
编辑:这是最终链接阶段的完整命令行。
感谢下面 nos 和 keltar 的评论,我可以看到问题出在哪里。
现在要弄清楚为什么 configure 完成了用它们的完整路径指定两个 openssl 库。
编辑 2:只是为了确认 -rpath 和 -L 选项工作正常。
如果我重写上述命令以删除对 openssl 库的构建位置的硬引用,则不完整的可执行文件中的 RPATH 将设置为 /usr/local/ssl/lib。
完整编辑的命令是:
c - 为什么 ld 在将可执行文件链接到 a 时需要 -rpath-link 以便需要另一个 so ?
我只是好奇这里。我创建了一个共享对象:
还有一个共享对象,与前一个链接:
现在,在创建链接到 的可执行文件时libb.so
,我必须将 -rpath-link 指定为 ld 以便它liba.so
在发现libb.so
依赖于它时可以找到:
否则ld会抱怨。
liba.so
为什么,链接时ld 必须能够定位test
?liba.so
因为对我来说,除了确认' 的存在之外,似乎 ld 并没有做太多其他事情。例如,readelf --dynamic ./test
只根据需要运行列表libb.so
,所以我猜动态链接器必须自己发现libb.so -> liba.so
依赖关系,并自己搜索liba.so
.
我在 x86-64 GNU/Linux 平台上,而 main() 例程 intest
调用一个函数,libb.so
而该函数又调用liba.so
.
escaping - 在 rpm 规范文件中转义
我正在尝试使用如下语句在我的规范文件中设置 rpath
但我无法正确转义“$ORIGIN”。我需要 gcc 的命令来包含字符串“$ORIGIN”,而不是沿行的任何地方展开它。我试过了
和其他一些没有成功的人。转义字符的正确顺序是什么?
dylib - OS X:编译后 dylib rpath 错误
我正在从源代码构建 cyrus sasl2 库。库安装在 /usr/local/lib 中,头文件安装在 /usr/local/include/sasl 中,这是正确的。
但是,当我运行尝试使用它们的应用程序时,我得到:
在 lib 上运行 otool -L 会显示错误的相对路径:
如何更改 make 编译库的方式以便编码正确的 rpath?我阅读了有关 install_name_tool 以在库中更改它的信息,但使用“-change”似乎不起作用,因为正确的路径“/usr/local/lib/libsasl2.dylib”比当前编码的路径长。我不应该在我以某种方式构建库时设置它吗?
谢谢。
macos - 为什么这个 Mac OS X rpath 命令不起作用?
我正在尝试使用 rpath 链接应用程序的某些库。一些 rpaths 工作其他人没有。
我有两个要链接的动态库,libgunrock
并且libtd
都位于不同的目录中。
我的链接如下所示:
加载路径正确。的相关部分otool -l app
:
然而我仍然得到错误:
如果我使用DYLD_LIBRARY_PATH=/Users/aterrel/workspace/apps/xdata/xlang/thunderdome
应用程序运行正常。
我不明白为什么libgunrock.dylib
加载得很好但libtd.dylib
不是。
ios - dyld:在 iOS 8 上构建到真实设备时未加载库
当我尝试将我的应用程序构建到真正的 iOS 设备时,就会发生这种情况。我正在使用 Cocoa Touch 框架(在 iOS 8 SDK 中引入)。在 iOS 模拟器上工作正常。
macos - 在库中传播 rpath 失败
简短的问题:库中命令的 rpath 是否LC_RPATH
传递给后续(和间接)动态加载的库?
更准确地说:我已经libapi.dylib
动态链接到libloader.dylib
它,而后者又动态加载了一个插件libplugin.dylib
。我有:
既不libloader.dylib
也不libplugin.dylib
定义 rpath 命令。并且安装名称没有任何@rpath/ 或其他路径,尽管加载命令中的名称以@rpath/ 开头。
客户端现在加载libapi.dylib
又链接到libloader.dylib
. 该库现在动态加载libplugin.dylib
链接到libloader.dylib
.
为什么不能通过libplugin.dylib
加载?它因为找不到而退出libloader.dylib
- 尽管它必须已经加载。为什么 rpath @loader_path/ fromlibapi.dylib
没有正确传播libloader.dylib
到libplugin.dylib
?使用 DYLD_PRINT_RPATHS 环境变量,我可以看到,为了加载libloader.dylib
. libplugin.dylib
这到底是怎么回事?
cmake - 使用 -L 添加链接库时,Cmake 未设置 RPATH
以下列方式设置链接库时
cmake 不处理 RPATH。使用“-L”和“-l”不是最佳实践,还是完全错误?在创建我自己的 Find*.cmake 时,我通常使用find_library()
,但我得到的 find 脚本没有这样做,而是使用“-L”和“-l”采用上述形式。
文档并没有真正解释 RPATH 是如何收集的,文档也不清楚它是如何处理“-l”和“-L”的,你得到的唯一指针是
“以 - 开头但不是 -l 或 -framework 的项目名称被视为链接器标志”