下面介紹一下在Linux系統(tǒng)下利用ldd指令查看動態(tài)庫依賴關(guān)系;
LDD用來打印或者查看程序運行所需的共享庫,常用來解決程序因缺少某個庫文件而不能運行的一些問題。ldd不是一個可執(zhí)行程序,而只是一個shell腳本。
使用ldd可以很方便的查看庫與庫之間的依賴關(guān)系,存放路徑等等;對于排查鏈接不到庫的問題很有幫助;
1、ldd命令全稱
ldd命令全稱為list dynamic dependencies(列出動態(tài)依賴),是Linux下常用的命令之一。它可以用來顯示一個可執(zhí)行文件或者共享庫(動態(tài)鏈接庫)所依賴的共享庫。
2 ldd參數(shù)說明
- –help 獲取指令幫助信息;
- –version 打印指令版本號;
- -d,–data-relocs 執(zhí)行重定位和報告任何丟失的對象;
- -r, --function-relocs 執(zhí)行數(shù)據(jù)對象和函數(shù)的重定位,并且報告任何丟失的對象和函數(shù);
- -u, --unused 打印未使用的直接依賴;
- -v, --verbose 詳細信息模式,打印所有相關(guān)信息;
3 簡單示例
ldd libEngineTask.so//查看libEngineTask.so所依賴的庫
可以看到,libEngineTask.so庫需要依賴libAIEngine.so,而libAIEngine.so的位置在./AI_lib/libAIEngine.so ,它的開始位置是0x00007f6928c7d000。
4 查看缺少的依賴庫
如果當(dāng)前的動態(tài)庫因為缺少依賴庫而無法鏈接,那么可以通過ldd查看缺少的依賴庫。比如還是上面的例子,我去AI_lib路徑下手動把libAIEngine.so刪掉,再去執(zhí)行l(wèi)dd,結(jié)果如下
結(jié)果中可以看出,libEngineTask.so庫需要依賴libAIEngine.so,而libAIEngine.so卻找不到,方便排查。
5、ldd指令詳細介紹
1、ldd是Linux中的一個重要命令,用于打印可執(zhí)行文件或共享庫所依賴的動態(tài)鏈接庫信息。下面詳細介紹ldd指令的功能和用法。
命令格式:
ldd [選項] <可執(zhí)行文件或共享庫>
2、功能描述:
ldd命令顯示一個可執(zhí)行文件或共享庫所依賴的動態(tài)鏈接庫列表。它會遞歸地檢查文件所依賴的所有庫,并顯示它們的路徑。通過ldd命令可以了解一個程序運行所需的庫文件,以及這些庫文件是否存在、版本是否匹配等信息。
3、常用選項:
-v, --verbose:顯示詳細的調(diào)試信息,包括版本號、加載方式等。
-u, --unused:只顯示未使用的直接依賴庫。
-r, --function-relocs:在關(guān)聯(lián)庫中顯示函數(shù)的重定位信息。
-d, --data-relocs:在關(guān)聯(lián)庫中顯示數(shù)據(jù)的重定位信息。
–help:顯示幫助信息。
–version:顯示版本信息。
4、使用示例:
(1) 查看可執(zhí)行文件所依賴的庫:
ldd /path/to/executable
(2) 查看共享庫的依賴關(guān)系:
ldd /path/to/shared_library.so
(3) 顯示詳細的依賴庫信息:
ldd -v /path/to/executable
(4) 只顯示未使用的直接依賴庫:
ldd -u /path/to/executable
(5) 顯示函數(shù)和數(shù)據(jù)的重定位信息:
ldd -r /path/to/executable
5、輸出解讀:
對于每個所依賴的庫,ldd會顯示它的路徑,并用以下格式標記其狀態(tài):
=> 文件路徑:正常找到并鏈接。
=> not found:未找到該庫文件。
=> version mismatch:版本不匹配。
=> incompatible:與可執(zhí)行文件或其他庫不兼容。
=> symbol not found:找不到某個符號。
另外,ldd命令還可以顯示庫所需的其他庫。通過觀察輸出結(jié)果,在開發(fā)調(diào)試過程中可以及時了解和解決動態(tài)鏈接庫的相關(guān)問題。文章來源:http://www.zghlxwxcb.cn/news/detail-595395.html
使用ldd命令可以幫助開發(fā)人員、系統(tǒng)管理員等快速了解程序運行所需的庫文件是否存在、版本是否匹配,從而排查庫依賴問題。在調(diào)試和部署過程中,ldd是一個非常有用的工具,能夠提高開發(fā)效率和減少出錯的可能性。文章來源地址http://www.zghlxwxcb.cn/news/detail-595395.html
到了這里,關(guān)于Linux系統(tǒng)下查看動態(tài)庫依賴關(guān)系指令(ldd)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!