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

Posted

tags:

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

参考技术A 工作中遇到可执行程序要使用单独的动态库目录,但是直接修改环境变量则会影响其他可执行文件。
查找资料时发现了编译增加 -Wl,-rpath 选项可以实现这个功能,

当明确知道动态库的绝对路径时,
gcc test.c -o test -Wl,-rpath,/usr/local/mylib/ -lfoo
当仅知道动态库相对于可执行文件的相对路径时,使用$ORIGIN代表可执行文件路径,
gcc test.c -o test -Wl,-rpath,'$$ORIGIN/../mylib' -lfoo
多个路径用 : 分割

编译成功之后可以通过readelf -dl test 查看设置的rpath

linux下库的使用

1 指定使用了什么库

-lstdc++

这样链接的时候就会去指定的目录下找链接库,优先使用动态库。然后在elf文件中加入依赖关系,放在NEEDED中。

2 指定在哪里去找库

-Wl,-rpath,some_path

这个有两个作用,第一,在链接的时候,帮助elf的生成。第二,告诉ld-linux.so.2该去哪里找NEEDED中指定的动态链接库。

 

以上是关于使用rpath解决指定动态库链接目录问题的主要内容,如果未能解决你的问题,请参考以下文章

动态库的链接和链接选项-L,-rpath-link,-rpath

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

gcc -rpath 指定动态库路径

linux下库的使用

编译时找不到动态库

Linux(gnu)环境动态链接库的搜索路径