放置在一起的物件模組的集合,這些物件模組都儲存於乙個存檔檔案中;
乙個程序一般分為乙個部分:環境變數,堆疊, 空閒記憶體,動態記憶體,可執行程式映像(包括程式本身的執行**,還有就是鏈結的靜態庫),共享庫(一般為動態鏈結庫.so檔案),其他記憶體;
靜態鏈結庫是在編譯生成可執行檔案是鏈結並裝載複製靜態鏈結庫中自己需要的那部分**,因此一旦可執行檔案生成以後,即使你把靜態庫檔案刪除也不會影響程式的執行!不過編譯後的可執行檔案就不能改變了,如果要更改的話就只有重新編譯一次!
假如我有幾個檔案:a.c b.c c.c 以及乙個標頭檔案h.h ,注意a,b,c檔案中都只包含了一些方法,沒有入口函式main;
1.首先生成單個目標檔案:gcc -c -g a.c
gcc -c -g b.c
gcc -c -g c.c
2.將生成的目標檔案(a.o, b.o, c.o)通過ar命令生成靜態庫檔案(.a):
ar -r libtest.a a.o b.o c.o
如上lib***.a中的test為你想要生成的庫檔名(任由你取,不過建議要見名知意);
-r引數表示替換(replace)的意思 ;如果要生成的庫中有要更新的方法時,就替換舊的;如果沒有就把新的新增在最後面;
ar -tv lib***.a (列出該庫中包含的檔案列表)
如:ar -tv libtest.a就會出現包含的三個目標檔案列表的詳細資訊(a.o, b.o, c.o);
Linux下動態鏈結庫和靜態鏈結庫
第一部分 編譯過程 預處理過程,負責標頭檔案展開,巨集替換,條件編譯的選擇,刪除注釋等工作。gcc e表示進行預處理。編譯過程,負載將預處理生成的檔案,經過詞法分析,語法分析,語義分析及優化後生成彙編檔案。gcc s表示進行編譯。彙編,是將彙編 轉換為機器可執行指令的過程。通過使用gcc c或者as...
linux下靜態鏈結庫的用法
最近在linux下程式設計發現乙個詭異的現象,就是在鏈結乙個靜態庫的時候總是報錯,類似下面這樣的錯誤 text 0x13 undefined reference to func 關於undefined reference這樣的問題,大家其實經常會遇到。在此,我以詳細示例給出常見錯誤的各種原因以及解決...
動態鏈結庫 靜態鏈結庫
包含標頭檔案和庫 idir 指定編譯查詢標頭檔案的目錄,常用於查詢第三方的庫的標頭檔案,例 gcc test.c i.inc o test。ldir 指定鏈結時查詢lib的目錄,常用於查詢第三方庫。llibrary 指定額外鏈結的lib庫 巨集定義 dmacro 以字串 1 預設值 定義 macro...