问题标签 [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.

0 投票
1 回答
1132 浏览

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

0 投票
0 回答
666 浏览

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。

完整编辑的命令是:

0 投票
4 回答
39908 浏览

c - 为什么 ld 在将可执行文件链接到 a 时需要 -rpath-link 以便需要另一个 so ?

我只是好奇这里。我创建了一个共享对象:

还有一个共享对象,与前一个链接:

现在,在创建链接到 的可执行文件时libb.so,我必须将 -rpath-link 指定为 ld 以便它liba.so在发现libb.so依赖于它时可以找到:

否则ld会抱怨。

liba.so为什么,链接时ld 必须能够定位testliba.so因为对我来说,除了确认' 的存在之外,似乎 ld 并没有做太多其他事情。例如,readelf --dynamic ./test只根据需要运行列表libb.so,所以我猜动态链接器必须自己发现libb.so -> liba.so依赖关系,并自己搜索liba.so.

我在 x86-64 GNU/Linux 平台上,而 main() 例程 intest调用一个函数,libb.so而该函数又调用liba.so.

0 投票
2 回答
2004 浏览

escaping - 在 rpm 规范文件中转义

我正在尝试使用如下语句在我的规范文件中设置 rpath

但我无法正确转义“$ORIGIN”。我需要 gcc 的命令来包含字符串“$ORIGIN”,而不是沿行的任何地方展开它。我试过了

和其他一些没有成功的人。转义字符的正确顺序是什么?

0 投票
1 回答
203 浏览

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”比当前编码的路径长。我不应该在我以某种方式构建库时设置它吗?

谢谢。

0 投票
0 回答
1200 浏览

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不是。

0 投票
1 回答
581 浏览

ios - dyld:在 iOS 8 上构建到真实设备时未加载库

在此处输入图像描述

当我尝试将我的应用程序构建到真正的 iOS 设备时,就会发生这种情况。我正在使用 Cocoa Touch 框架(在 iOS 8 SDK 中引入)。在 iOS 模拟器上工作正常。

0 投票
0 回答
483 浏览

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.dyliblibplugin.dylib?使用 DYLD_PRINT_RPATHS 环境变量,我可以看到,为了加载libloader.dylib. libplugin.dylib这到底是怎么回事?

0 投票
1 回答
647 浏览

frameworks - 未加载 Swift 框架

我最近完成了一个与我的 Swift 应用程序一起使用的 API 客户端。我在一个单独的项目中编写了框架,然后将子项目添加到我的主项目中,类似于将Quick and Nimble的框架添加到项目中的方式。

当我尝试运行我的应用程序时,我收到此错误:

而且我一生都无法弄清楚如何解决此错误。

My.xcodeproj没有添加到与我的主项目相同的目录中,但似乎是符号链接的。

有谁知道发生了什么?

编辑:
我尝试将项目添加为git submodule目录中的一个,但我仍然遇到同样的错误

0 投票
2 回答
14650 浏览

cmake - 使用 -L 添加链接库时,Cmake 未设置 RPATH

以下列方式设置链接库时

cmake 不处理 RPATH。使用“-L”和“-l”不是最佳实践,还是完全错误?在创建我自己的 Find*.cmake 时,我通常使用find_library(),但我得到的 find 脚本没有这样做,而是使用“-L”和“-l”采用上述形式。

文档并没有真正解释 RPATH 是如何收集的,文档也不清楚它是如何处理“-l”和“-L”的,你得到的唯一指针是

“以 - 开头但不是 -l 或 -framework 的项目名称被视为链接器标志”