靜態庫和動態庫

2021-08-22 07:16:25 字數 1747 閱讀 4031

靜態庫和動態庫

靜態庫相當於中間檔案(.o)的集合,靜態庫在鏈結時使用,將靜態庫中的程式直接合成到最終的可執行檔案中,一經鏈結,可執行檔案執行時不用再次使用該靜態庫,直接可以執行。

windows下靜態庫:.lib檔案       linux下靜態庫:.a檔案

靜態庫的生成過程:

將所有的原始檔編譯生成中間檔案(*.o)

使用命令:ar crv lib***.a *.o   (***代表生成的靜態庫的名稱)

通過上面這兩步就生成了乙個靜態庫

靜態庫的使用:

gcc -o main main.c -l(路徑) -l(靜態庫名稱)

eg:gcc -o main main.c -l/lib -lmymath  (紅色部分根據情況而定)

這是我們要生成靜態庫的原始檔「a.c」

現在我們來將它生成乙個靜態庫

可以看到這裡有乙個   libmyadd.a   的檔案,這就是我們生成的靜態庫

在這裡要使用這個靜態庫

成功列印出結果。

動態庫也叫共享庫,是不可執行的可執行檔案(其中沒有main函式),動態庫在執行的時候使用,程式在執行時會動態的將動態庫載入到記憶體上執行,也就是說使用動態庫的程式在執行的時候必須有動態庫的存在。

windows上動態庫:.dll檔案    linux上動態庫:.so檔案

動態庫的生成過程:使用命令:gcc -shared -fpic -o lib***.so *.c  (***表示動態庫名稱)

動態庫的使用:

gcc -o main main.c -l(路徑) -l(庫名)

使用上面這種方法不可以直接載入動態庫,還需要進行一些設定:

1,將動態庫拷貝到   /lib  或者   /usr/lib任意乙個目錄下面

lib目錄下面儲存的就是各種各樣的庫檔案,scanf,printf等庫函式在使用時,系統都會預設到這幾個目錄下去找其所在的庫,將我們自己生成的庫放進去,系統自然也會去找到並載入執行,這時只需輸入庫名,而不再需要輸入路徑

2,設定環境變數:

使用命令:export ld_library_path=(動態庫的絕對路徑)

這種方法只在當前終端下永久生效,如果重新開啟乙個終端就會失效,需要重新配置環境變數

3,修改配置檔案:

在  /etc目錄下的profile或者bashrc檔案的末尾新增環境變數(需要root使用者才能設定)

這三種方法人選其一再執行上面的命令就可以載入動態庫,後面兩種方法在使用動態庫時需要加上路徑,第一種可以直接使用,只需要庫名就ok

生成動態庫的過程:

使用方法一:

方法二:

庫(靜態庫和動態庫)

一 靜態庫 以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...

靜態庫和動態庫

一。靜態庫 靜態庫的優點在於使用簡單,編譯快速。靜態庫在應用程式生成時,已經編譯成為可重定位的目標檔案,因此可以不必再編譯,節省編譯時間,以最短的時間生成可執行程式。步奏 a。建立靜態庫 1 在編輯器中編輯其靜態庫函式 static lib.c 2 在shell中編譯該原始檔,生成乙個可重定位的目標...

靜態庫和動態庫

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