靜態庫和動態庫

2021-06-20 05:21:27 字數 1641 閱讀 6210

一。靜態庫

靜態庫的優點在於使用簡單,編譯快速。靜態庫在應用程式生成時,已經編譯成為可重定位的目標檔案,因此可以不必再編譯,節省編譯時間,以最短的時間生成可執行程式。

步奏:a。建立靜態庫

1)在編輯器中編輯其靜態庫函式**static_lib.c

2)在shell中編譯該原始檔,生成乙個可重定位的目標檔案如下:

$gcc -c static_lib.c

輸入此命令會生成乙個static_lib.o的可重定位的目標檔案

3)現在需要使用剛剛生成的static_lib.o目標檔案建立乙個靜態庫static_lib.a,執行命令:

$ar rcs static_lib.a static_lib.o

b。使用靜態鏈結庫

1)在vi編輯器裡編輯標頭檔案static_lib.h

2)在vi編輯器裡編輯main.c函式,並且將剛剛編輯好的static_lib.h加入到main.c的標頭檔案裡(即包含static_lib.a庫中函式宣告的標頭檔案static_lib.h,這樣就可以引用這些函式了)

4)在shell中執行一下程式:

二。動態庫

動態庫的優點很多,主要有一下幾個方面:

模組型很強;易於更新和管理;便於程式的發布;易於程式模組的更新;執行特定程式時,可以覆蓋整個庫或更新庫中的特定函式;以上操作不會影響已經執行的程式,他們仍會使用已經裝載的庫。

動態庫是在程式啟動時被裝載的。當乙個應用程式裝載了動態庫後,其他應用程式仍然可以裝載同乙個動態庫。這個被多個程序同時使用的動態庫在記憶體中只有乙個副本

a。建立動態庫

void sort(int array,int length);

void bubble_sort(int *array,int length);

int binary_search(int *array,int length);

2)由於動態庫可以被多個程序共享載入,所以生成位置無關的目標檔案,這是需用使用gcc編譯器的-fplc(用於生成位置無關**)和-shared(用於將位置無關的**製作為動態庫),執行命令:

$gcc -shared -fplc -o share_lib.so share_lib.c

這時乙個新的動態庫就建立成功了。之後使用者可以在自己的應用程式中引用該庫中的函式,在程式載入時鏈結該庫就可以了。

b。使用動態鏈結庫

1)在vi編輯器裡編輯標頭檔案share_lib.h,share_lib.h包含動態庫中符號宣告的標頭檔案

2)在vi編輯器裡編輯main1.c函式,main1呼叫insert_sort函式對陣列排序,並且呼叫binary_search函式查詢整數;並且將剛剛編輯好的share_lib.h加入到main1.c的標頭檔案裡(即包含標頭檔案,引用share_lib庫中的函式)

3)使用share_lib動態庫建立以下程式,執行命令:

4)在shell中執行以下程式:

又:1)在vi編輯器裡編輯標頭檔案share_lib.h,share_lib.h包含動態庫中符號宣告的標頭檔案

2)在vi編輯器裡編輯main2.c函式,main2呼叫bubble_sort函式對陣列排序,並且呼叫binary_search函式查詢整數;並且將剛剛編輯好的share_lib.h加入到main2.c的標頭檔案裡(即包含標頭檔案,引用share_lib庫中的函式)

4)在shell中執行以下程式:

庫(靜態庫和動態庫)

一 靜態庫 以c語言的形式生成庫 h中extern c int add int int extern c int sub int int 二.測試靜態庫 將.h和.lib放入 h ifdef cplusplus c 程式設計師用c的方式開啟 extern c int add int int exte...

靜態庫和動態庫

靜態庫 lib 中相當於存放了所有的源 包括他引入的其他靜態lib檔案.其實是所有cpp編譯後對應的.obj檔案的打包 所以靜態lib都比較大。動態庫dll也有lib但是這個lib,只是用來幫助程式在鏈結時定位dll中的函式的位址的。所以會在exe載入時才重定位函式的位址。重定位就是根據鏈結的這個l...

靜態庫和動態庫

靜態庫 是在執行程式之前就已經加入到執行 中,成為執行程式的一部分來執行的,字尾名 a 動態庫 是在執行程式啟動時載入到執行 中,字尾名 so 靜態庫一開始就加入了執行 使得可執檔案比較臃腫,導致檔案比較大,占用記憶體較大使得它的編譯速度減慢,但是執行檔案時可以直接呼叫 所以執行效率較高 而動態庫只...