问题标签 [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 回答
862 浏览

c++ - pkg-config:设置 -rpath 的最佳实践?

是否有任何基于输出设置-rpath或 libtool 的最佳实践?我必须诉诸诡计吗?-Rpkg-configsed

0 投票
1 回答
1618 浏览

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使用来解决,但我不喜欢在编译过程中引入额外的步骤。

  1. cargo是否可以(以及如何)使用配置/构建脚本将加载类型从 @rpath 更改为 @loader_path ?
  2. 是否可以将@rpath 值传递给cargo
0 投票
0 回答
105 浏览

dll - 我可以在 Windows 的编译时提供 .dll 的绝对路径吗?

我创建了一个 .dll(动态链接库)。使用这个库我想创建可执行文件。

但我想为.dll 提供与.exe 链接的绝对路径。因此,当我执行 .exe 时,它​​会与 .dll 链接。

我不想设置 PATH(环境变量),不想将 .dll 放入系统目录或可执行文件的同一目录中。我知道可以使用 -rpath 选项进入 linux。

我是 Windows 新手。我尝试在窗口中找到 rpath equal 选项,但我失败了。

0 投票
0 回答
1019 浏览

c++ - 使用 CMake 正确管理共享库

我正在尝试将 cmake 构建与两个共享库链接,链接发生但RPATH指向两个库之一的绝对路径,而另一个库的readelf输出不正确。

我所做的是以下内容:

这有效并发生链接,但 readelf 打印以下内容:

所以基本上两个库之一(但只有一个,而且没有意义)有一个绝对路径,而 rpath 包含两个完整路径(这不是我想要做的,因为我想随两个库一起发布可执行文件在可执行文件的同一文件夹中(或最多子文件夹)。

我错过了一些微不足道的事情吗?

0 投票
1 回答
3086 浏览

c++ - 在可执行文件中找不到 C++ 动态链接库

.so在路径中有/home/test/lib/libTest.so一个名为的可执行文件myexec,它是用RPATH指向/home/test/lib/. 但是,当我ldd执行 on时myexec,它libTest.so显示未找到,我必须这样做export LD_LIBRARY_PATH才能使其正常工作。

我已经确认:

  1. libTest.so确实存在于/home/test/lib/
  2. objdump -x myexec | grep RUNPATH确实表明/home/test/lib/内置在可执行文件中。

有谁知道为什么没有设置就找不到库LD_LIBRARY_PATH

0 投票
1 回答
1412 浏览

c++ - 如何在 OS X 上使用 Bazel 为 C++ 设置 rpath

我尝试将以下内容添加到我的BUILD文件中:

但是当我检查可执行文件时

它不包括path/to/add. 如何使用 bazel 更改可执行文件中的 rpath。

0 投票
2 回答
14458 浏览

gcc - rpath 的正确使用(相对与绝对)

在构建二进制文件或库时,指定rpath,即

告诉链接器在二进制文件运行时在哪里可以找到所需的库。

这里关于绝对路径和相对路径的 UNIX 哲学是什么?使用绝对路径是否更好,以便可以从任何地方找到 lib?还是让它相对更好,这样复制整个目录或重命名更高级别的路径不会使二进制文件不可用?

更新

使用$ORIGIN通常是构建二进制文件的首选方式。对于库,我喜欢放在绝对路径中,否则你将无法链接到库。符号链接将指向链接$ORIGIN的路径而不是链接目标的路径。

0 投票
0 回答
657 浏览

gcc - 共享库的 gcc 链接:使用 $ORIGIN 的二级依赖项

这是对此问题的后续问题。

我知道$ORIGIN-rpath选项中使用会生成一个动态绝对路径,该路径将始终指向指定位置 - 无论我在哪里使用库。

让我感到困惑的是:我使用这个库来生成一个共享的二进制文件,并且我(再次)设置了-Wl,-rpath选项 using$ORIGIN以使二进制文件始终能够找到它的库。现在库的原始$ORIGIN值不再可用或错误,因为它似乎被新的覆盖了。

不知何故这是可以理解的,因为我现在正在生成一个新的共享对象——二进制文件——它有自己的$ORIGIN. 解决这个问题的一种方法是为二进制文件-rpath提供两个位置,一个是库,一个是库本身需要的。在我看来,这-rpath几乎没有用,因为我不能只链接到库并指定它的位置,我还需要指定库的依赖位置。

我的问题:有没有办法使用指定层次-rpath$ORIGIN?我想避免使用绝对路径,这显然可以解决我的问题。

0 投票
1 回答
2993 浏览

c++ - Qt:Mac 上的链接框架:使用 rpath

我想用 Qt 创建一个自定义框架。我可以自己创建框架,但是 Qt 在运行时找不到框架:

原因很简单:二进制文件不知道去哪里寻找框架。

我在二进制文件上使用了 otool 并看到了这个:

所以,我的问题如下(有关更多详细信息,请查看以下内容):如何告诉 qmake 将我的库的路径设置为:

有没有办法用 qmake 做到这一点?我确实知道如何用 .pro 更改它install_name_tool,但我想直接将它添加到 .pro 文件中。


到目前为止我做了什么:

我修改了我的 pro 文件以更改为二进制文件的 rpath 以包含构建时库所在的路径:

这样,我可以简单地修改 rpath 以进行发布,而无需使用install_name_tool. 但是,为此,我需要将第一行更改为:

在我的应用程序 pro 文件中,我指定了以下内容:

最后缺少的部分是如何添加@rpath/. 谢谢你的帮助。

0 投票
1 回答
14314 浏览

macos - 如何设置dylib搜索路径OSX

我在 Xcode 中有一个项目,我在环境变量窗格中设置 DYLD_FALLBACK_LIBRARY_PATH 以设置我的应用程序应该在哪里寻找要链接的库(这对我的目的很有效)

在此处输入图像描述

我现在正在编写一个 CMakeLists.txt 文件来生成这个项目,我想从脚本中设置这个属性。

我知道我可以这样做:

但是当我运行时出现此错误:

启动应用程序时。我想声明是不一样的。

有人知道我如何从 CMakeLists.txt 中实现与 Xcode 中相同的功能吗?

我隐约知道 CMake RPATH 的东西,但如果可能的话,我宁愿避免这种情况。

感谢您的时间!

干杯!

汤姆