根據鏈結時期的不同,庫又有靜態庫和動態庫之分。靜態庫是在鏈結階段被鏈結的,所以生成的可執行檔案就不受庫的影響,即使庫被刪除,程式依然可以成功執行。而動態庫是在程式執行的時候被鏈結的。程式執行完,庫仍需保留在系統上,以供程式執行時呼叫。鏈結靜態庫從某種意義上來說是一種複製貼上,被鏈結後庫就直接嵌入可執行程式中了,這樣系統空間有很大的浪費,而且一旦發現系統中有bug,就必須一一把鏈結該庫的程式找出來,然後重新編譯,十分麻煩。而動態庫剛好彌補了這個缺陷,因為動態庫是在程式執行時被鏈結的,所以磁碟上只需保留乙份副本,一次節約了空間,如果發現bug或者是要公升級,只要用新的庫把原來的替換掉就可以了。靜態庫是不是一無是處了呢?非也。如果**在其他系統上執行,且沒有相應的庫時,解決辦法就是使用靜態庫。而且由於動態庫是在程式執行的時候被鏈結,因此動態庫的執行速度比較慢。
好了,我們了解了關於動態庫和靜態庫的相關知識,那麼如何使用gcc生成靜態庫和動態庫呢?
程式清單如下:
test.c
1int add(int a,intb)2
56int sub(int a,intb)7
1011
int mul(int a,int
b)12
1516
int div(int a,int
b)17
test.h的內容
1#ifndef _test_h_
2#define _test_h_
3extern
int add(int a,int
b);4
extern
int sub(int a,int
b);5
extern
int mul(int a,int
b);6
extern
int div(int a,int b);
main.c檔案內容
1 #include2 #include3intmain()
4
1.使用gcc生成靜態庫及靜態庫使用方法:
在此例中,test.c用於編譯生成靜態庫libtest.a,test.h為libtest.a對應的標頭檔案。
第一步:生成test.o目標檔案,使用gcc -c test.c -o test.o命令。
第二步:使用ar將test.o打包成libtest.a靜態庫,使用ar rcs -o libtest.a test.o命令
第三步:生成libtest.a靜態庫後,可以使用命令ar t libtest.a檢視libtest.a檔案中包含哪些檔案。
2.使用gcc生成動態庫及使用動態庫的方法
第一步:生成test.o目標檔案,使用如下命令。在此處需要新增-fpic引數,該引數用於生成位置無關**已工生成動態庫使用,使用命令:gcc -c -o test.o -fpic test.c
第二步:使用-shared引數生成動態庫,使用如下命令:gcc -shared -o libmyshare.so test.o,上述兩個命令可以連在一起,如下所示:gcc -shared -fpic -o libmyshare.so test.c
如何使用GCC生成動態庫和靜態庫
根據鏈結時期的不同,庫又有靜態庫和動態庫之分。靜態庫是在鏈結階段被鏈結的,所以生成的可執行檔案就不受庫的影響,即使庫被刪除,程式依然可以成功執行。而動態庫是在程式執行的時候被鏈結的。程式執行完,庫仍需保留在系統上,以供程式執行時呼叫。鏈結靜態庫從某種意義上來說是一種複製貼上,被鏈結後庫就直接嵌入可執...
如何使用GCC生成動態庫和靜態庫
根據鏈結時期的不同,庫又有靜態庫和動態庫之分。靜態庫是在鏈結階段被鏈結的,所以生成的可執行檔案就不受庫的影響,即使庫被刪除,程式依然可以成功執行。而動態庫是在程式執行的時候被鏈結的。程式執行完,庫仍需保留在系統上,以供程式執行時呼叫。鏈結靜態庫從某種意義上來說是一種複製貼上,被鏈結後庫就直接嵌入可執...
C 如何使用GCC生成動態庫和靜態庫
一.靜態庫和動態庫的定義及區別 程式編譯的四個過程 1.預處理 展開標頭檔案 巨集替換 去掉注釋 條件編譯 i字尾 2.編譯 檢查語法,生成彙編 s字尾 3.彙編 彙編 轉換成機器 o字尾 4.鏈結 鏈結到一起生成可執行程式 out字尾 靜態庫 靜態庫是在鏈結階段被鏈結的,所以生成的可執行檔案就不受...