主要有兩種方法,如下:
1、方法1 nm *.so
2、方法2 readelf -a *.so
說明:
nm可列出.o .a .so中的符号信息,包括諸如符号的值,符号類型及符号名稱等。所謂符号,通常指定義出的函數,全局變量等等。
示例說明 :
nm -D libname.so
nm
有用的options:
-A 在每個符号信息的前面打印所在對象文件名稱;
-C 輸出demangle過了的符号名稱;
-D 打印動态符号;
-l 使用對象文件中的調試信息打印出所在源文件及行号;
-n 按照地址/符号值來排序;
-u 打印出那些未定義的符号;
linux靜态庫和動态庫有什麼區别?動态鍊接庫和靜态鍊接庫一般是編譯集成一系列的接口(函數)在程序源代碼編譯完成後通過編譯器編譯并通過鍊接器與這些庫進行鍊接動态鍊接庫與靜态鍊接庫的區别在于鍊接器在進行鍊接時靜态庫會被直接編譯進程序裡而動态鍊接庫并不會,我們這裡将這些鍊接庫稱作依賴(動态庫和靜态庫)程序的運行需要這些依賴,程序在靜态鍊接後該程序本身便已包含該依賴而動态鍊接後的程序本身本不包含該依賴,這些依賴需要執行者自行安裝進操作系統(動态庫、運行時庫)程序運行時會動态地加載這些庫linux上動态庫一般的後綴後為.so靜态庫一般的後綴為.a由于靜态鍊接會直接将庫編譯進程序裡所以靜态編譯後的程序相較于動态鍊接所要大這就是因為靜态鍊接會将鍊接庫編譯進程序裡的原因,所以占用就要大了出于這種原因,靜态庫不易于維護與更新,如果鍊接庫中有實現有bug等需要更新則需要更新整個程序,因為靜态庫被編譯進程序中了但動态庫就沒有這種情況了,因為動态庫是程序運行時動态加載的,所以我們隻需要更新動态庫而不需要更新所有依賴該庫的程序(軟件)另一方面,很多程序的開發都會使用到相同的鍊接庫,也就是很多程序(軟件)會有相同的依賴如果将這些依賴全部靜态編譯的話将會造成存儲資源占用過多而造成資源浪費而使用動态庫的方式這些程序(軟件)則可以共享一個鍊接庫,而不需要每個程序都帶一個鍊接庫,這樣就大大地減少了存儲資源占用空間
總結以上是真正的電腦專家為你收集整理的linux動态庫加載原理(linux鍊接動态庫)的全部内容,希望文章能夠幫你解決所遇到的問題。
如果覺得真正的電腦專家網站内容還不錯,歡迎将真正的電腦專家推薦給好友。
有話要說...