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
    

這裏寫圖片描述

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