1. 生成方式
靜態庫:
首先將原始檔編譯成目標檔案:gcc –c test.c -o test.o
然後生成靜態庫:ar –rc libstatic.a test.o
共享庫:
首先將原始檔編譯成目標檔案:gcc –c test.c -o test.o
生成共享庫:gcc –fpic –shared –o libshared.so test.o
靜態庫的鏈結方法:
gcc –o software_name -l. –lstatic main.c(預設庫在當前資料夾)
共享庫的鏈結方法:
gcc –o software_name -l. –lshared main.c(預設庫在當前資料夾)
2. 存在週期
靜態庫在程式編譯時會被連線到目標**中,程式執行時將不再需要該靜態庫。
動態庫在程式編譯時並不會被連線到目標**中,而是在程式執行是才被載入,因此在程式執行時還需要動態庫存在。
3.載入時間
二者的不同點在於**被載入的時刻不同。
靜態庫的**在
編譯過程
中已經被載入可執行程式,因此體積較大。
共享庫的**是在
可執行程式執行時
才載入記憶體的,在編譯過程中僅簡單的引用,因此**體積較小。
4.如何使用
靜態庫直接編譯到程式裡面;
動態庫可以通過設定環境變數來告知其位址使用:
export ld_library_path='/home/lib'
注意:若靜態庫和動態庫同名, gcc命令將優先使用動態庫。
Linux 靜態庫和動態庫
庫有兩種,一種是靜態鏈結庫,一種是動態鏈結庫,不管是哪一種庫,要使用它們,都要在程式中包含相應的include標頭檔案。我們先來回顧一下程式編譯的過程。如下圖 庫 本質乙個目標檔案,這個檔案的字尾有兩種格式,對應兩種庫 缺點是 檔案太大。多次拷貝庫程式,不僅浪費空間,而且檔案體積大 下面實現乙個靜態...
Linux 靜態庫和動態庫
我們指定c程式從 到乙個可執行程式需要經過預處理 編譯 彙編 鏈結。而最後一步鏈結又分為動態鏈結與靜態鏈結。靜態鏈結相當於就是講所要鏈結的庫提前放入鏈結的檔案,這樣子的檔案體積較大,但是可移植性較高。而動態鏈結是在執行的時候才去主動鏈結所需要鏈結的庫,這樣的 體積較小,多個程式共同使用庫的 我們li...
linux靜態庫和動態庫
我們通常把一些公用函式製作成函式庫,供其它程式使用。函式庫分為靜態庫和動態庫兩種。靜態庫在程式編譯時會被連線到目標 中,程式執行時將不再需要該靜態庫。動態庫在程式編譯時並不會被連線到目標 中,而是在程式執行是才被載入,因此在程式執行時還需要動態庫存在。靜態庫 是在可執行程式執行之前就已經加入到執行 ...