C 如何使用GCC生成動態庫和靜態庫

2021-09-28 09:38:35 字數 1467 閱讀 9603

一.靜態庫和動態庫的定義及區別

程式編譯的四個過程:

1.預處理  展開標頭檔案/巨集替換/去掉注釋/條件編譯(.i字尾)

2.編譯    檢查語法,生成彙編(.s字尾)

3.彙編    彙編**轉換成機器**(.o字尾)

4.鏈結    鏈結到一起生成可執行程式(.out字尾)

靜態庫:

靜態庫是在鏈結階段被鏈結的,所以生成的可執行檔案就不受庫的影響,即使庫被刪除,程式依然可以成功執行

動態庫:

動態庫是在程式執行時被鏈結的,程式執行完,庫仍需保留在系統上,以供程式執行時呼叫

區別:

鏈結靜態庫從某種意義上來說是一種複製貼上,被鏈結後庫就直接嵌入可執行程式中,這樣系統空間有很大的浪費,而且一旦發現庫檔案中存在bug,就必須把鏈結該靜態庫的所有程式都找出來,然後重新編譯,十分的麻煩,而動態庫剛好彌補了這個缺陷,因為動態庫是在程式執行時被鏈結的,所以磁碟上只需保留乙份副本,節約了空間,如果動態庫中發現bug或者需要公升級,只要用新的庫把原來的替換掉就可以了,當然,由於動態庫是在程式執行時被鏈結,因此動態庫的執行速度比較慢

1.使用gcc生成靜態庫及靜態庫使用方法:

test.h

test.c

main.c

在此例中,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生成動態庫和靜態庫

根據鏈結時期的不同,庫又有靜態庫和動態庫之分。靜態庫是在鏈結階段被鏈結的,所以生成的可執行檔案就不受庫的影響,即使庫被刪除,程式依然可以成功執行。而動態庫是在程式執行的時候被鏈結的。程式執行完,庫仍需保留在系統上,以供程式執行時呼叫。鏈結靜態庫從某種意義上來說是一種複製貼上,被鏈結後庫就直接嵌入可執...

如何使用GCC生成動態庫和靜態庫

根據鏈結時期的不同,庫又有靜態庫和動態庫之分。靜態庫是在鏈結階段被鏈結的,所以生成的可執行檔案就不受庫的影響,即使庫被刪除,程式依然可以成功執行。而動態庫是在程式執行的時候被鏈結的。程式執行完,庫仍需保留在系統上,以供程式執行時呼叫。鏈結靜態庫從某種意義上來說是一種複製貼上,被鏈結後庫就直接嵌入可執...