ldd 查看程序依賴庫

ldd 作用:用來查看程式運行所需的共享庫,常用來解決程式因缺少某個庫文件而不能運行的一些問題。 示例:查看test程序運行所依賴的庫:

/opt/app/todeav1/test$ldd test
libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00000039a7e00000)
libm.so.6 => /lib64/libm.so.6 (0x0000003996400000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00000039a5600000)
libc.so.6 => /lib64/libc.so.6 (0x0000003995800000)
/lib64/ld-linux-x86-64.so.2 (0x0000003995400000)
  • 第一列:程序需要依賴什麼庫
  • 第二列: 系統提供的與程序需要的庫所對應的庫
  • 第三列:庫加載的開始地址 通過上面的信息,我們可以得到以下幾個信息:

通過對比第一列和第二列,我們可以分析程序需要依賴的庫和系統實際提供的,是否相匹配 通過觀察第三列,我們可以知道在當前的庫中的符號在對應的進程的地址空間中的開始位置 如果依賴的某個庫找不到,通過這個命令可以迅速定位問題所在;

註解

原理: ldd不是個可執行程式,而只是個shell腳本; ldd顯示可執行模塊的dependency的工作原理,其實質是通過ld-linux.so(elf動態庫的裝載器)來實現的。ld-linux.so模塊會先於executable模塊程式工作,並獲得控制權,因此當上述的那些環境變量被設置時,ld-linux.so選擇了顯示可執行模塊的dependency。


书籍推荐