Linux library查找顺序(按优先级排列)

  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. LD_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
    

这里写图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章