GCC靜態庫 動態庫

2021-08-14 15:11:53 字數 1269 閱讀 5198

1、靜態庫

linux環境下的靜態庫的擴充套件名為 .a

step 1: 編譯原始檔,生成可重定位目標檔案

" gcc -c static_lib.c"

step 2: 使用ar工具建立乙個靜態庫,或者將目標檔案加入到乙個已經存在的靜態庫中。格式:ar rcs 靜態庫名 目標檔案2 目標檔案2 ... 目標檔案n

" ar rcs static_lib.a static_lib.o "

step 3: 製作乙個包含該靜態庫中全域性符號宣告的標頭檔案。這個標頭檔案可以包含在應用程式的標頭檔案中,這樣就可以引用靜態庫中的全域性符號了。extern void insert_sort(int *array, int length);     extern int binary_search(int *array, int item, int length);

step 4: 使用gcc的-l選項來指定靜態庫,或者使用-l引數來指定庫檔案的搜尋路徑。-l和-l之後都直接帶引數而不帶空格。-l是鏈結器選項,一定要放在被編譯的原始檔名稱之後,否則鏈結失敗。

「gcc -o build test.c static_lib.a」 或  "gcc -o build test.c -l static_lib.a"

2、動態庫

動態庫又稱為共享庫或者動態鏈結庫。windows環境下的dll檔案,linux環境下的so檔案。

linux環境下是哦用gcc建立乙個動態庫。由於動態庫可以被多個程序共享載入,所以需生成位置無關的目標檔案:使用gcc編譯器的 -fipc 選項,生成位置無關的**;使用 -shared 選項,將位置無關的**製作為動態庫。

step 1: 建立動態庫   「 gcc -shared -fpic -o share_lib.so share_lib.c 」

step 2: 製作乙個包含該動態中全域性符號宣告的標頭檔案。這個標頭檔案可以包含在應用程式的標頭檔案中,這樣就可以引用動態庫中的全域性符號。extern void insert_sort(int *array, int length);    extern int binary_search(int *array, int item, int length);

step 3: 使用動態庫建立程式     「 gcc -o build test.c ./share_lib.so 」

gcc 靜態庫和動態庫

include void print hello include include hello.h int main define hello 9999 void print hello 其中 hello.c 和 main.c 在同乙個目錄下,hello.h在上乙個目錄。先生成 o 檔案 gcc he...

gcc編譯靜態庫 動態庫

今天,乙個同事編譯靜態庫,我也趁此機會在溫習一下,先google一下,然後在自己實驗。首先,在網上抄個例子,內容如下 建靜態庫 hellos.h ifndef hello s h define hello s h void prints char str endif hellos.c include...

GCC 編譯 靜態庫 動態庫

工作流程 命名格式 lib 庫的名字 so製作 第一步 得到 o檔案 引數 fpic表示生成與位置無關 gcc i.include fpic c c第二步 建立動態庫 shared 製作動態庫 o 重新命名生成的新檔案 gcc shared o lib so o使用 命名格式 lib 庫的名字 a製...