问题标签 [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 投票
3 回答
13588 浏览

windows - 是否有与 -rpath 链接器标志等效的 Windows/MSVC?

在 Linux/GCC 上,我可以使用 -rpath 标志来更改共享库的可执行文件搜索路径,而无需调整环境变量。

这也可以在 Windows 上完成吗?据我所知,总是在可执行文件的目录和 PATH 中搜索 dll。

我的场景:我想根据共享库的属性(32/64 位/调试/发布)将共享库放入位置,而不考虑唯一名称。在 Linux 上,这很容易通过 rpath 完成,但我还没有找到在 Windows 上执行此操作的任何方法。

感谢您的任何提示!

0 投票
3 回答
7778 浏览

command-line - 如何使用 $ORIGIN 获取 RPATH 以在 Code::Blocks GCC 上工作?

我正在尝试将包含特殊字符串 $ORIGIN 的 RPATH 链接到使用 GCC 和 Code::Blocks IDE 构建的可执行文件中。我已经指定

在项目的链接器选项中,但到 GCC 的命令行输出是错误的(为了清楚起见已删除):

为 Code::Blocks 指定此参数的正确方法是什么?

0 投票
15 回答
188571 浏览

python - 在 CentOS 中安装 python 2.6

我有一个运行 CentOS 的 shell。

对于我正在做的一个项目,我需要 python 2.5+,但 centOS 非常依赖 2.4。

根据我的阅读,如果升级到 2.5,很多事情都会中断。

我想将 2.5 与 2.4 分开安装,但我不知道该怎么做。到目前为止,我已经下载了源 tarball,解压缩了它,并做了一个./configure --prefix=/opt我希望它结束​​的地方。我现在可以make, make install吗?或者还有更多?

0 投票
1 回答
4397 浏览

gcc - AIX 5.3 (ld-xlc) 等效选项 Linux (ld-gcc) -rpath

我的编译器:xlc 版本 10.1 环境:AIX5.3 链接器:ld

当我在 Linux 上工作时,使用gcc (4.4.1) 我使用以下选项

(-Wl 用于链接器选项)它将目录添加到运行时库搜索路径。

xlc 编译器的等价物是什么?

或者与链接器的-rpath等价的东西。

谢谢你。

0 投票
2 回答
11687 浏览

gcc - matlab mex 文件的共享库位置:

我正在尝试编写一个使用 libhdf5 的 matlab mex 函数;我的 Linux 安装提供了 libhdf5-1.8 共享库和头文件。但是,我的 Matlab 版本 r2007b 提供了 1.6 版本的 libhdf5.so。(显然,Matlab.mat文件引导 hdf5)。当我编译 mex 时,它在 Matlab 中出现了段错误。如果我将我的 libhdf5 版本降级到 1.6(不是长期选项),代码可以编译并运行良好。

问题:我该如何解决这个问题?如何告诉 mex 编译过程链接到 /usr/lib64/libhdf5.so.6 而不是 /opt/matlab/bin/glnxa64/libhdf5.so.0 ?当我尝试-Wl,-rpath-link,/usr/lib64在我的编译中使用它时,我会收到如下错误:

确认。最后的手段是下载 hdf5-1.6.5 标头的本地副本并完成它,但这不是未来的证明(Matlab 版本升级是我的未来。)。有任何想法吗?

编辑:根据 Ramashalanka 的出色建议,我

A) 调用mex -v以获取 3 个gcc命令;最后是链接器命令;

B)用 a 调用该链接器命令-v以获取collect命令;

C)调用它collect2 -v -t和其余的标志。

我的输出的相关部分:

所以,实际上libhdf5.sofrom/usr/lib64正在被引用。但是,我相信这会被环境变量覆盖,我LD_LIBRARY_PATH的 Matlab 版本会在运行时自动设置它,因此它可以找到自己的版本,例如libmex.so,等等。

我认为该crt_file.c示例既可以使用 b/c,也可以不使用我正在使用的函数 ( H5DOpen,在从 1.6 到 1.8 的移动中具有签名更改(是的,我正在使用-DH5_USE_16_API)),或者不太可能,b/ c 它不会击中需要 hdf5 的 Matlab 内部部件。确认。

0 投票
5 回答
88702 浏览

linux - 是否有一种编程方式来检查 Linux 上的当前 rpath?

我知道可以readelf -d <elf> | grep RPATH从 shell 中检查给定的二进制文件,但是可以在进程中执行此操作吗?

像(我完全编造的系统调用):

我正在尝试在我们的代码库中诊断一些可疑的 SO 链接问题,并希望尽可能以这种方式检查 RPATH(我宁愿不必生成外部脚本)。

0 投票
1 回答
1235 浏览

linux - 发布带有共享库的 GNU/Linux Firefox 插件(用于没有 root 访问权限的安装)

该应用程序是一个 Firefox 插件(从 $HOME/.mozilla/plugins 加载),因此设置 LD_LIBRARY_PATH 的包装脚本不是一个简单的选择。

据我所知,RPATH 不能引用 $HOME 并且只能是绝对路径。

Firefox 尝试从 ~/.mozilla/plugins dlopen 它的插件但失败(因为它取决于安装在用户主目录中某处的共享库)。

修改 Firefox 菜单项以提供围绕 Firefox 的包装器(带有 LD_LIBRARY_PATH)太 hacky。

安装程序脚本应该做什么(没有 root 访问权限)来制作依赖于共享库的标准 firefox 加载插件?

  1. 我是否应该尝试将所有内容嵌入到 .so 中以删除依赖项?
  2. 我应该在安装阶段尝试制作安装程序脚本来完成链接或修补 RPATH 吗?
0 投票
2 回答
4976 浏览

xcode - 链接被顶起..什么是-rpath?macOS X

所以,我正在构建一个项目,它使用来自已编译库(.dylib 或 .so)的函数。我在适当的位置有头文件和库文件(这是 QtRoot 的所有部分,顺便说一句),但是当我尝试在 Xcode 中构建我的项目时,我得到一个调试器错误:

dyld:库未加载:@rpath/libRIO.so 引用自:/Users/paulthompson/Documents/Programming/Build Products/Debug/MacHeliosSim.app/Contents/MacOS/MacHeliosSim 原因:找不到图像 sharedlibrary apply-load-rules all数据格式化程序暂时不可用,将在“继续”后重试。(目前无法调用加载器,已锁定。)

现在,如果我从 Finder 打开它,构建的程序本身将运行得很好,但是每当我尝试从 Xcode 运行它时,它就会向我吐口水。这个 rpath 是什么东西,为什么调试器找不到库,即使 Xcode 本身知道它们在哪里,而且显然从 Finder 运行的程序也可以找到它们?

0 投票
3 回答
7345 浏览

qt - 使用 Qt Creator 在 Unix 系统中开发 Qt 应用程序

我正在使用 Qt Creator (2.1 RC) 在 Linux 中开发 Qt 应用程序。我创建了 2 个项目,并使用向导将库项目添加到应用程序项目中。但是,当我运行它时,我收到错误:

/home/jakepetroules/silverlock/silverlock-build-desktop/desktop/silverlock: error while loading shared libraries: libsilverlocklib.so.1: cannot open shared object file: No such file or directory

是否可以设置一些 qmake 变量,以便 Qt Creator 正确设置环境以运行?必须使用启动器脚本将所有文件复制到另一个目录才能测试构建,这非常烦人。在 Windows 上它可以完美运行 - Qt Creator 在运行您的应用程序时会自动将包含 DLL 的目录添加到 PATH(从资源管理器运行它会说 DLL 未找到)。Mac OS X 更糟,必须在所有东西上运行 install_name_tool ......

那么如何设置我的 qmake 文件,以便一切都可以通过 Qt Creator 中的运行按钮正常运行?没有这种能力也很难调试。

0 投票
0 回答
501 浏览

macos - 如何创建可重定位的应用程序

希望可以有人帮帮我。我有一些用python编程的东西。这使用了很多库。所以我用 virtualenv 创建了一个虚拟环境,并复制了这个环境中需要的每个文件。然后我使用 Platypus 创建了一个 .app。当然,该应用程序无法正常工作,因为如果您在 .so 或 .dylib 上使用 otool -L ,那么链接将指向原始安装位置。知道我可以使用 install_name_tool 并设置新的绝对路径,该应用程序现在可以工作,但不可重定位。经过一番阅读,我发现您可以为 Mac OS X 10.5+ 设置 -rpath。所以我将路径更改为@rpath/lib/...dylib 并启动应用程序

但它不起作用。所以我错过了什么或做错了什么?