靜態庫和共享庫的基礎知識

庫是一組預先編譯好的函數集合,這些函數需要按照可重用的原則編寫,這些函數通常是有關聯並執行同一項任務,比如屏幕處理函數庫curses和nsurses庫.

標準系統庫在/lib和/usr/lib中,編譯器會自動找到.除此之外的庫在使用時需要指定完全路徑或用-L/路徑和-l標識


靜態庫和動態庫:靜態庫和動態庫是兩種共享程序代碼的方式,它們的區別是靜態庫在程序的鏈接階段被複制到程序中,程序執行無關;動態庫在鏈接階段沒有被複制到程序中,而是程序在運行時由系統動態加載到內存中以供調用。使用動態庫的優點是系統只需載入一次,不同的程序可以得到內存中相同的複本,因此節省了很多內存。


靜態庫:使gcc -c命令先生成.o文件,再用ar -r命令,將生成的.o文件創建成靜態庫.a文件

例:ar crv libtest.a a.o b.o

ar即archive,c是create表示創建,r是replacement,表示使用XX文件,v是顯示執行過程中的一些信息

在Berkeley UNIX衍生系統中,還需要爲函數庫生成一個內容表:ranlib XX.a

可以用nm命令來查看程序,目標文件或庫所使用的函數


動態庫(共享庫):動態庫在不同系統上實現的方式不同,這裏只看unix系統的.

動態庫的保存位置與靜態庫一樣,但後綴爲.so

一個程序本身不包含共享庫中函數的代碼,只是在執行時函數引用被解析並調用共享庫到內存中.系統只需一份拷貝就可供多個應用程序使用.

動態庫的另一個好處是可以獨立更新,它的文件名格式是xx.so.數字,數字表示版本號,調用時只需調用他的符號連接xx.so

用ldd命令查看程序中的動態庫


靜態庫.a文件類似windows中的.lib文件,.so文件類似.dll文件

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章