Chinaunix首页 | 论坛 | 博客
  • 博客访问: 295091
  • 博文数量: 32
  • 博客积分: 665
  • 博客等级: 上士
  • 技术积分: 370
  • 用 户 组: 普通用户
  • 注册时间: 2009-07-25 11:20
文章分类

全部博文(32)

文章存档

2023年(1)

2021年(1)

2020年(2)

2018年(3)

2014年(1)

2013年(2)

2012年(9)

2011年(9)

2010年(2)

2009年(2)

分类: LINUX

2020-11-25 11:13:44

-rpath 和 -rpath-link 是链接时指定程序依间接赖库的搜索路径
-rpath 即在链接时指定链接器搜索路径,也在运行时指定ELF加载器搜索路径
-rpath-link 仅在链接时供链接器搜索
与 -L 和 -l 的关系
-L 和 -l 是指定程序的直接引用库,并进行实际符号链接
对于间接引用的库,也可以使用 -L 和 -l 显式地传递给链接器,而不使用-rpath-link

当应用程序直接引用一个十分复杂的库时,这个十分复杂的库背后又依赖了很多间接引用库,使用者没必要知道和花时间研究都有什么间接引用库,这时使用-rpath-link就合适了,让所有直接和间接依赖库都和预期的目标运行环境一致。


-rpath是传递给链接器的参数,内容为一个路径
用法:
-Wl,-rpath,/path/to/lib

-XLinker -rpath -XLinker /path/to/lib

-XLinker -rpath=/path/to/lib
作用:
链接时,到这个路径搜索动态库的间接引用,并将这个路径编译进ELF程序文件,在运行期供ELF加载器使用
运行时,ELF加载器在这个路径去搜索程序依赖的动态库并加载


-rpath-link也是传递给链接器的参数,作用与-rpath类似
用法:
-Wl,-rpath-link,/path/to/lib

-XLinker -rpath-link -XLinker /path/to/lib

-XLinker -rpath-link=/path/to/lib

不同:
链接时,到这个路径搜索动态库的间接引用,但不编译进ELF程序文件


何时使用-rpath
当程序发布时附带私有的共享库文件时,用户的安装路径会不同,也不会考虑把附带的共享库融合到目标系统中标准的/lib或/usr/lib里,这时使用-rpath指定发布程序的共享库搜索路径。
-rpath可以指定相对路径,相对当前路径,但用户的运行路径又会不同,所以指定相对路径没有意义,应该指定程序所在位置的相对路径,用法:
-Wl,-rpath,$ORIGIN../lib
ELF加载器会根据程序的实际位置替代$ORIGIN
注意:
其他脚本里,$的转义,如shell脚本,需要用引号,Makefile脚本里需要俩$$


何时使用-rpath-link
当链接程序时,开发机编译环境里有程序依赖的共享库和共享库的间接依赖,但与目标系统中的位置不同,这时使用-rpath-link指定链接时共享库搜索路径。与运行时无关,运行时由ELF加载器负责处理。


LD_LIBRARY_PATH
运行期目标系统的环境变量,由ELF加载器使用,这个有安全隐患,最好别用
阅读(7307) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~