问题标签 [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.
linux - 我怎么知道 ldd 如何解决依赖关系
对于 ldd 标识的依赖项,我如何知道它是使用二进制文件的 RPATH 还是环境的 LD_LIBRARY_PATH ?
ubuntu - 无法从可执行文件中删除 rpath
我正在为 ARM 平台进行交叉编译。在我链接的许多库文件中,只有极少数有 rpath。
我不知道它来自哪里,因为我将我需要的所有库复制到一个文件夹中,然后使用 Netbeans 将它们添加到项目中(在 Ubuntu 下使用 Linaro 编译器)。即使我从命令行编译,输出也是一样的。
我尝试了 patchelf,但它没有删除 rpath。该程序本身可以工作(例如,如果我在搜索库时创建了它正在寻找的路径)。
知道如何解决吗?
linker - 与 rpath 的递归链接
我想创建一个可执行文件(exec),它链接一个动态库(shared2),它链接另一个共享库(shared1),这样我就不必在exec的makefile中指定shared1。具体来说,shared2 将 -rpath 指定为 shared1,但是当我编译 exec 时,rpath 是相对于 exec 而不是 shared2 进行评估的。这要求我在 exec 中指定 shared1 的 -rpath (这是我想要避免的)。
以下玩具示例说明了我的观点:
目录树是:
执行/生成文件
shared2/shared2/makefile
shared1/makefile
我让 main.cpp 使用了 shared2.cpp 中的东西,而 shared2.cpp 中的东西使用了 shared1.cpp 中的东西。
当我去编译 Exec/makefile 时,shared2/shared2/makefile 中指定的 rpath 是相对于 Exec/makefile 的位置进行评估的,因此编译失败。请注意,我在第一个 makefile 中引用的部分是它成功所必需的,但我想避免这种情况。
有解决方法吗?
非常感谢 :)
macos - RPATH 无法扩展
我在 OS X 上构建了一个始终无法加载的可执行文件(名为 demux),但我找不到原因:
该框架位于可执行文件旁边。Otool 显示以下内容:
和:
鉴于此,我认为将@executable_path 添加到可执行文件的运行时搜索路径将允许它查看相对安装名称仅以@rpath 为前缀的任何框架和库(如@rpath/sfeMovie.framework/...)和它位于可执行文件旁边。确保此运行时搜索路径正确:
但这失败了,我不知道为什么。对我来说,@executable_path/sfeMovie.framework/Versions/2.0/sfeMovie 看起来是正确的路径,但它仍然失败……是否滥用了 @rpath 或 @executable_path?
gcc - rpath 或 LD_LIBRARY_PATH 包含 $HOME
RPATH 或 LD_LIBRARY_PATH 是否可能指向包含 $HOME 之类的环境变量的路径?这样当二进制文件在不同的机器上执行时,它可能会产生一个用户特定的搜索路径。
linux - 如何说服动态加载器在 Linux 的 RPATH 中尊重 $LIB?
我已将二进制文件的 rpath 设置为以下内容:/usr/$LIB/test:$ORIGIN/lib/
这些库位于/usr/lib64/test
,但是当我运行我的二进制文件时,它说它找不到这些库。
我已经检查了 rpath readelf -d
。
问题很简单——为什么?
升级#1
操作系统:Ubuntu 12.04.3 LTS
ld 版本:2.15
c++ - 共享库 RPATH 和二进制 RPATH 优先级
如果共享库链接到二进制文件,并且共享库还依赖于其他库,那么共享库的 RPATH 和二进制文件的 RPATH 的优先级(链接器搜索顺序)是什么?二进制文件的 RPATH 可以覆盖共享库中的 RPATH 吗?我在共享库 RPATH 中设置的 $ORIGIN 是指 lib 位置还是二进制位置?
提前致谢。
matlab - Matlab: invalid mex file library not loaded
I have created a mex function (more specifically, using CUDA)
the compilation was successful, and I got a mex
file zMul.mexmaci64
but on the execution, matlab reported an error:
#xA;What should I do do solve it?
additional info
setting the environment vars (PATH,LD_LIBRARY_PATH,DYLD_LIBRARY_PATH) in Matlab and in
.bash_profile
doesn't work for meI'm pretty sure that the environment vars are set correctly because when I created an alias to the
dylib
file, Matlab detected it, tried to load it, but failed with message:no suitable image found
Thanks!
macos - 在 OSX 上可靠部署 Delphi 生成的 Dylib
我想在 OSX 上部署一个 .dylib,它是用 Delphi 创建的。这个 .dylib 应该可以被第三方应用程序加载。
这似乎是一个重复的问题,但经过大量搜索,我找不到答案。与此问题相同:https ://forums.embarcadero.com/thread.jspa?messageID=592417
问题是 .dylib 需要,但从第三方应用程序运行时libcgunwind.1.0.dylib
找不到它。作为测试,我尝试复制到,并且有效。当 OSX 找不到 .dylib 时,它总是会在 .dylib 中搜索。不幸的是,我不想将其作为最终解决方案,因为它需要提升权限,并且似乎是处理简单问题的一种严厉方式。libcgunwind.1.0.dylib
usr/lib
usr/lib
仔细检查一下,我曾经otool
检查过我的 .dylib,它给了我以下路径:@rpath/libcgunwind.1.0.dylib
.
@rpath
问题是,当您的 .dylib 由第三方应用程序运行时,没有考虑将在 中列出哪些路径。为此,应用程序必须始终提供指向libcgunwind.1.0.dylib
.
显而易见的解决方案是使用install_name_tool
替换@rpath
为@loader_path
。如果我的逻辑是正确的,这应该会导致我的 .dylib 总是 find libcgunwind.1.0.dylib
,只要它们在同一个文件夹中。这是有道理的,因为 .dylib 应该负责找到自己的依赖项。
所以,我尝试了以下命令行:
install_name_tool -change @rpath/libcgunwind.1.0.dylib @loader_path/libcgunwind.1.0.dylib libTest.dylib
并收到此消息:
install_name_tool: file not in an order that can be processed (local relocation entries out of place): libTest.dylib
我为此错误消息进行了一些搜索,但我无法找到有关它的任何信息。我必须假设install_name_tool
期望在 gcc 或 llvm 构建的 .dylib 中找到一些特定的约定,并且 Delphi 的编译器没有提供这些约定。
我在 Delphi 的编译器中进行了一些挖掘dccosx
,并检查了 Delphi 发送给它的命令行参数,但我找不到任何有用的选项。这种使用libcgunwind.1.0.dylib
, 似乎对编译器来说是隐含的,而不是我可以调整的。
我并不是说这是解决问题的正确方法,这些只是我尝试过的最新方法。如果您能想出不同的解决问题的方法,请分享您的想法!
c++ - 如何设置我的 C++ autotools 项目不使用 rpath?
我有一个包含多个可执行文件和共享库的大型 autotools 项目。主可执行文件嵌入了一个 RPATH,如果我想用 LD_LIBRARY_PATH 覆盖,稍后会出现问题。有没有办法告诉自动工具(通过 ./configure 或其他方式)不要嵌入这个 rpath?