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