靜態庫和動態庫
靜態庫相當於中間檔案(.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...