1. -Wl,-rpath-link
该配置为 “ld option”
其中,-Wl选项告诉编译器将后面的参数传递给链接器
在链接时指定库的路径,不影响程序执行时库的路径
2. -Wl,–rpath=.,–enable-new-dtags
该配置为 “ld option”
链接可执行程序时写入路径信息DT_RUNPATH
在opensuse上指定-R或–rpath会同时添加DT_RUNPATH和DT_RPATH两个section。对于其他的发行版会只设置RPATH,只有在指定–enable-new-dtags才会加上DT_RUNPATH。
值得注意的是:如果设置了RUN_PATH则完全无视RPATH,而且也不先看自己的RUN_PATH,而是去看LD_LIBRARY_PATH,没有再去看RUN_PATH
3. -Wl,-rpath,
该配置为 “ld option”
-R(或-rpath)指定程序运行时库的路径,当指定多个动态库搜索路径时,路径之间用冒号":"分隔
-R或-rpath选项将指定的路径信息(DT_RPATH)保存在可执行文件中,运行时它会直接到该路径查找库
写入的DT_RPATH信息可用 ”readelf -d a.out“ 查看
如未找到被加载对象的RPATH,则递归查找其loader直到链条的顶端(可执行程序或被dlopen打开的对象)的RPATH
4. D_RUN_PATH
该配置为 “environment variable”
在ELF 系统中, 对于native linker,如果未指定-rpath-link 和 -rpath,系统会使用该环境变量指定的路径
5. -L选项
该配置为 “gcc option”
用于设置动态库的搜索位置
仅在链接时生效,不影响程序执行时库的路径
6. LD_LIBRARY_PATH
该配置为 “environment variable”
全局有效,指定链接时和运行时库搜索路径
7. /lib
包含许多被 /bin/ 和 /sbin/ 中的程序使用的内核级库文件
8. /usr/lib
被/usr目录下的程序所使用的系统级共享库
9. /etc/ld.so.cache
ldconfig命令在默认搜寻目录/lib和/usr/lib以及动态库配置文件/etc/ld.so.conf内所列的目录下,搜索出可共享的动态链接库(格式如lib*.so*)
搜索结果按名字排序后写入缓存文件/etc/ld.so.cache
往/lib和/usr/lib里面加东西,是不用修改/etc/ld.so.conf的,但之后要调一下ldconfig
往其他目录,一定要修改/etc/ld.so.conf,然后再调用ldconfig
值得注意的是 LD_LIBRARY_PATH 的优先级是高于 /lib 和 /usr/lib 的。