Linux下動態鏈接庫加載路徑


引子

近日,服務器遷移后,偷懶未重新編譯nginx的,直接./nginx啟動,結果遇到如下問題:
“error while loading shared libraries”
這是是因為需要的動態庫不在動態鏈接器ld.so的搜索路徑導致。

ld.so 動態共享庫搜索順序

1、ELF可執行文件中動態段DT_RPATH指定;gcc加入鏈接參數“-Wl,-rpath”指定動態庫搜索路徑;
2、環境變量LD_LIBRARY_PATH指定路徑;
3、/etc/ld.so.cache中緩存的動態庫路徑。可以通過修改配置文件/etc/ld.so.conf 增刪路徑(修改后需要運行ldconfig命令);
4、默認的 /lib/;
5、默認的 /usr/lib/

與動態鏈接庫相關命令

(1)ld 是gcc的鏈接程序。
(2)ldd是查看可執行文件中所依賴的庫的程序,比如想查main程序用到了那些動態庫,可以直接 
ldd main
(3)ldconfig用來更新文件/etc/ld.so.conf的修改生效。
(4)nm用來查看.so庫中的函數名字,標記是T的就是動態庫里面生成的名字。如:nm /lib/libc*.so


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM