使用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解决指定动态库链接目录问题的主要内容,如果未能解决你的问题,请参考以下文章