linux動態庫搜索路徑順序

  • 在linux中執行程序時,有時會遇到“error while loading shared libraries”這種錯誤,這是因爲動態鏈接器ld無法找到程序啓動需要的動態庫。這時就需要設置動態庫的搜索路徑了。

  • 動態鏈接器ld搜索路徑的順序以及如何設置:

    1. ELF文件中Dynamic Section段的DT_RPATH設置的路徑。例如,可以在編譯時添加鏈接參數“-Wl,--rpath,./lib”來指定搜索./lib。
    2. 環境變量LD_LIBRARY_PATH設置的路徑。
    3. ELF文件中Dynamic section段的DT_RUNPATH設置的路徑。使用方式與1類似,需要添加–enable-new-dtags參數。例如,鏈接參數爲“-Wl,--rpath,./lib,--enable-new-dtags”,則是指定DT_RUNPATH爲./lib。因爲DT_RUNPATH存在,則DT_RPATH會被忽略。
    4. /etc/ld.so.cache中緩存的動態庫搜索路徑。可以通過修改配置文件/etc/ld.so.conf 增刪路徑(修改後需要運行ldconfig命令)。
    5. 默認的/lib/和/usr/lib/。如果鏈接時指定-z nodefaultlib,這個默認路徑將被忽略。
  • PS:可以使用“readelf -d”查看Dynamic Section段。

  • PPS:如果只想對特定的app起作用的話,通過設置DT_RPATH或者DT_RUNPATH來指定搜索路徑是一個較優的方式。

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