linux动态库加载原理(linux链接动态库)
如何查看linux動態庫中包含哪些函數?
主要有兩種方法,如下:
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链接动态库)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ps怎么扣图出来(ps怎么抠图出来在粘贴
- 下一篇: 常见的并发模型_两个常见的并发错误