问题标签 [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.
c++ - pkg-config:设置 -rpath 的最佳实践?
是否有任何基于输出设置-rpath
或 libtool 的最佳实践?我必须诉诸诡计吗?-R
pkg-config
sed
macos - OS X 上的 Rust 和加载程序路径(@rpath、@loader_path)
我正在尝试解决使用 Rust 加载外部库的问题。
输入:
我有一个可执行文件rtest
和一个 dylib libcpp2rs.dylib
。该库通过 FFI 链接到可执行文件:
我的build.rs
文件(我正在传递一个带有libcpp2rs.dylib
位置的额外参数):
还有我的Cargo.toml
文件:
我使用cargo build
命令进行编译。
输出:
otool
向我显示该库将由以下方式加载RPATH
:
但同时LC_LPATH
可执行文件中没有部分:
它导致我的应用程序出现加载错误:
这个问题可以通过install_name_tool
使用来解决,但我不喜欢在编译过程中引入额外的步骤。
cargo
是否可以(以及如何)使用配置/构建脚本将加载类型从 @rpath 更改为 @loader_path ?- 是否可以将@rpath 值传递给
cargo
?
dll - 我可以在 Windows 的编译时提供 .dll 的绝对路径吗?
我创建了一个 .dll(动态链接库)。使用这个库我想创建可执行文件。
但我想为.dll 提供与.exe 链接的绝对路径。因此,当我执行 .exe 时,它会与 .dll 链接。
我不想设置 PATH(环境变量),不想将 .dll 放入系统目录或可执行文件的同一目录中。我知道可以使用 -rpath 选项进入 linux。
我是 Windows 新手。我尝试在窗口中找到 rpath equal 选项,但我失败了。
c++ - 使用 CMake 正确管理共享库
我正在尝试将 cmake 构建与两个共享库链接,链接发生但RPATH
指向两个库之一的绝对路径,而另一个库的readelf
输出不正确。
我所做的是以下内容:
这有效并发生链接,但 readelf 打印以下内容:
所以基本上两个库之一(但只有一个,而且没有意义)有一个绝对路径,而 rpath 包含两个完整路径(这不是我想要做的,因为我想随两个库一起发布可执行文件在可执行文件的同一文件夹中(或最多子文件夹)。
我错过了一些微不足道的事情吗?
c++ - 在可执行文件中找不到 C++ 动态链接库
我.so
在路径中有/home/test/lib/libTest.so
一个名为的可执行文件myexec
,它是用RPATH
指向/home/test/lib/
. 但是,当我ldd
执行 on时myexec
,它libTest.so
显示未找到,我必须这样做export LD_LIBRARY_PATH
才能使其正常工作。
我已经确认:
libTest.so
确实存在于/home/test/lib/
objdump -x myexec | grep RUNPATH
确实表明/home/test/lib/
内置在可执行文件中。
有谁知道为什么没有设置就找不到库LD_LIBRARY_PATH
?
c++ - 如何在 OS X 上使用 Bazel 为 C++ 设置 rpath
我尝试将以下内容添加到我的BUILD
文件中:
但是当我检查可执行文件时
它不包括path/to/add
. 如何使用 bazel 更改可执行文件中的 rpath。
gcc - rpath 的正确使用(相对与绝对)
在构建二进制文件或库时,指定rpath
,即
告诉链接器在二进制文件运行时在哪里可以找到所需的库。
这里关于绝对路径和相对路径的 UNIX 哲学是什么?使用绝对路径是否更好,以便可以从任何地方找到 lib?还是让它相对更好,这样复制整个目录或重命名更高级别的路径不会使二进制文件不可用?
更新
使用$ORIGIN
通常是构建二进制文件的首选方式。对于库,我喜欢放在绝对路径中,否则你将无法链接到库。符号链接将指向链接$ORIGIN
的路径而不是链接目标的路径。
gcc - 共享库的 gcc 链接:使用 $ORIGIN 的二级依赖项
这是对此问题的后续问题。
我知道$ORIGIN
在-rpath
选项中使用会生成一个动态绝对路径,该路径将始终指向指定位置 - 无论我在哪里使用库。
让我感到困惑的是:我使用这个库来生成一个共享的二进制文件,并且我(再次)设置了-Wl,-rpath
选项 using$ORIGIN
以使二进制文件始终能够找到它的库。现在库的原始$ORIGIN
值不再可用或错误,因为它似乎被新的覆盖了。
不知何故这是可以理解的,因为我现在正在生成一个新的共享对象——二进制文件——它有自己的$ORIGIN
. 解决这个问题的一种方法是为二进制文件-rpath
提供两个位置,一个是库,一个是库本身需要的。在我看来,这-rpath
几乎没有用,因为我不能只链接到库并指定它的位置,我还需要指定库的依赖位置。
我的问题:有没有办法使用指定层次-rpath
值$ORIGIN
?我想避免使用绝对路径,这显然可以解决我的问题。
c++ - Qt:Mac 上的链接框架:使用 rpath
我想用 Qt 创建一个自定义框架。我可以自己创建框架,但是 Qt 在运行时找不到框架:
原因很简单:二进制文件不知道去哪里寻找框架。
我在二进制文件上使用了 otool 并看到了这个:
所以,我的问题如下(有关更多详细信息,请查看以下内容):如何告诉 qmake 将我的库的路径设置为:
有没有办法用 qmake 做到这一点?我确实知道如何用 .pro 更改它install_name_tool
,但我想直接将它添加到 .pro 文件中。
到目前为止我做了什么:
我修改了我的 pro 文件以更改为二进制文件的 rpath 以包含构建时库所在的路径:
这样,我可以简单地修改 rpath 以进行发布,而无需使用install_name_tool
. 但是,为此,我需要将第一行更改为:
在我的应用程序 pro 文件中,我指定了以下内容:
最后缺少的部分是如何添加@rpath/
. 谢谢你的帮助。