引子
近日,服務器遷移后,偷懶未重新編譯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