概念:庫檔案就是目標檔案的集合,可以被其它**呼叫,把**封裝成庫檔案後方便使用、方便管理、安全性高、保密性強。
靜態庫和共享庫輔助工具:
ldd 檢視可執行程式依賴那些共享庫
nm 檢視目標檔案、可執行檔案、靜態庫、共享庫中的符號列表
strip **,刪除目標檔案、可執行檔案、靜態庫、共享庫中的符號。
objdump 顯示目標檔案、可執行檔案、靜態庫、共享庫反彙編資訊。
靜態庫就是目標檔案的集合,呼叫靜態庫就是把靜態庫中的二進位制指令拷貝到可執行檔案中。
優點:執行速度比共享庫快。
缺點:可執行檔案相對較大,當靜態庫修改後,可執行檔案要重新編譯。
共享庫:就是沒入口的可以執行檔案,呼叫共享庫就是記錄共享中二進位制指標的位置即可。當執行可執行檔案時共享庫會被一起載入到記憶體,可執行檔案中可以跳轉到共享庫中執行。
優點:可執行檔案相對較小,當共享庫修改後,可執行檔案不要重新編譯。
缺點:執行速度比靜態庫慢,可執行檔案執行時也需要依賴共享庫。
製作靜態庫:
1、編譯出目標檔案
gcc -c code.c
2、打包目標檔案生成靜態庫
ar -r libname.a a.o b.o c.o …
使用靜態庫:
1、直接使用
gcc code.c libname.a
2、指定庫檔案的位置
-l指定庫的路徑 -l指定庫名
gcc code.c -lpath -lname
3、通過設定環境變數指定庫的路徑,-l指定庫名
開啟配置檔案:vi ~/.bashrc
在檔案的末尾新增:export library_path=$library_path:path
例如: # 靜態庫路徑使用靜態庫:gcc code.c -lnameexport library_path=$library_path:/home/php/lib
注意:刪除環境變數,需要關閉終端,再重新開啟。
製作共享庫:
1、編譯生成目標檔案
gcc -fpic -c code.c
fpic 位置無關
2、生成共享庫
gcc -shared -fpic a.o b.o c.o … -o libname.so
使用共享庫:
1、直接使用
gcc code.c libname.so
2、指定庫檔案的位置
-l指定庫的路徑 -l指定庫名
gcc code.c -lpath -lname
3、通過設定環境變數指定庫的路徑: library_path
例如: #分享庫路徑注意:設定程式執行共享庫的載入路徑
開啟配置檔案:vi ~/.bashrc
在檔案的末尾新增:export ld_library_path=$ld_library_path:path
注意:當共享與靜態庫同時存在時,編譯器會優先使用共享庫,加乙個 -static編譯引數 優先使用靜態庫。
靜態庫和共享庫
建立和使用靜態庫 1 建立目錄 mkdir p test sub 2 在子目錄sub 下編寫hello.c和hello.h hello.c include include hello.h void hello hello.h include void hello 4 在主目錄test 下編寫main...
Linux中的靜態庫和共享庫
一 庫的概念 二 靜態庫 2.1 靜態庫的特點 程式中包含 執行時不再需要靜態庫 程式執行時無需載入庫,執行速度更快 占用更多磁碟和空間 靜態庫公升級後,程式需要重新編譯鏈結 2.2 靜態庫的建立及鏈結第一步 確定庫中函式的功能 介面 第二步 編寫庫原始碼 hello.c include inclu...
Linux 靜態庫與共享庫
可以把 多個編譯好的目標檔案 打包成為乙個檔案,就是庫檔案。庫檔案有兩種 靜態庫 a 和共享庫 so 靜態庫和共享庫區別 靜態庫是 函式的歸檔,在使用時,複製函式的 區到最終的檔案中。共享庫是 函式的歸檔,在使用時,把函式在共享庫中的位址拿到最終的檔案中。靜態庫的效率稍高一點,但占用空間非常大,而且...