- 论坛徽章:
- 17
|
回复 3# yecheng_110
rpath指定的是运行时搜索路径。库的搜索路径在其实分为两个环境,一个链接生成程序时用到的路径,一个是程序运行时需要的路径。ELF程序在生成时如果有用到动态库那么会在program header中生成.interp section,这个section就是用于指定interpreter的。interpreter的功能很多,而分析动态库符号及其依赖进而加载和重定位相应对象是其功能最重要一环。interpreter也叫作Runtime Linker。在链接生成程序时会链接器会根据“默认搜索路径”和指定的参数路径来定位库文件。而当程序运行时interpreter会根据“默认搜索路径”和rpath指定的路径来定位库文件。“默认搜索路径”在32位系统下是/lib,/usr/lib,在64位下是/lib64,/usr/lib64,可以通过修改/etc/ld.conf来指定额外的目录到“默认搜索路径”中,可见“默认搜索路径”既在链接生成阶段起作用也在运行时起作用。LD_LIBRARY_PATH也可以指定搜索路径,它在链接生成时和运行时都起作用。可以通过在LD_LIBRARY_PATH指定路径覆盖“默认搜索路径”中的库文件。因为程序在启动时会先使用LD_LIBRARY_PATH。 |
|