patchelf 修改 rpath 以解决动态库问题

Posted Geek.Fan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了patchelf 修改 rpath 以解决动态库问题相关的知识,希望对你有一定的参考价值。

1.背景

        一般情况下我们编译出来的程序lib_media一直使用的是系统默认路径中的动态库,需求是要使用自定义目录中的动态库,就可以使用patchelf来实现。

2.确定问题        

        运行 readelf -a lib_media搜索与 rpath 相关的内容,果然搜索到了,发现确实设定了这个变量的值,并且指向默认路径,这就是导致 LD_LIBRARY_PATH 不能生效的原因。

        确定了问题后,搜索 lib_media编译目录中的 Makefile 文件,发现 rpath 的设定是通过向编译器传参设置的,确定问题应该是 configure 的时候没有进行某种配置。这其实可以通过 patchelf 来实现。

3.解决

        运行如下命令,将 rpath 的只修改为自定义的动态库目录就解决了这个问题。

patchelf --set-rpath '/home/xx/local/apr/apr/lib/:/home/xx/local/apr/util/lib/' lib_media

以上是关于patchelf 修改 rpath 以解决动态库问题的主要内容,如果未能解决你的问题,请参考以下文章

patchelf: not found错误解决及功能说明

LINUX可以使用patchelf 修改文件的rpath

linux 修改 elf 文件的dynamic linker 和 rpath

使用rpath解决指定动态库链接目录问题

Qt程序发行Linux版,软件打包知识(patchelf 工具修改依赖库,确认 qmake -v 是自己使用的Qt版本,否则用export PATH进行修改)good

iOS 报错 : dyld: Library not loaded: @rpath/