C語言如何編譯動態庫與靜態庫

2021-08-11 00:07:36 字數 1147 閱讀 4510

關於動態庫與靜態庫的作用這裡就不在詳細贅述了,重點說一下如何編譯動態庫與靜態庫及使用,一些大型的程式一般擁有著良好的架構,各個功能模組之間能夠相互協調工作,達到預期的效果,但有的程式並不是所有的原始碼都是自己編寫,特別像是用到晶元廠商的提供的庫;能夠把這些融合起來的就是需要提供的庫;

原料:test1.c test2.c main.c

(詳細的**不再詳細列出來,大家都是開發者,都希望用最短的時間找到想找的東西,而不是浪費太多的時間在細枝末節上)

1.如何編譯動態庫

gcc test1.c test2.c -shared -fpic -o libtest.so

使用動態庫

gcc main.c -l. -ltest -o a.out

( -l : 表示需要庫的路徑

-l:表示需要庫的名稱,如libtest.so,名稱則為test

) (ps:執行a.out時有可能提示找不到libtest.so檔案,這時需要把庫檔案放入到/lib等目錄下,或者新增環境變數ld_library_path,包含有庫檔案的路徑即可)

2.如何編譯靜態庫

gcc -c test1.c test2.c

ar -r libtest.a test1.o test2.o

使用靜態庫

gcc main.c -static -l. -ltest -o a.out

( -static:可強制編譯時使用靜態庫,如果不使用這個引數,而靜態庫與動態庫同名的話,會優先使用動態庫

) 3.靜態庫與動態庫

在可執行程式執行條件上,使用靜態庫編譯時,生成的執行檔案就不再依賴.a靜態庫檔案,而使用動態庫編譯的執行檔案必須包含.so庫檔案才能執行;

在可執行程式的執行速度上,靜態編譯的檔案會優於動態編譯(畢竟靜態編譯把庫檔案的**都編譯到執行檔案,與動態編譯不同在執行動態庫中函式時才會去路徑下的動態庫中尋找鏈結);

在可執行程式的大小上,靜態編譯後的檔案大小比動態編譯的檔案大很多;如果對記憶體要求較高的可選擇用動態編譯,雖然會慢一點;

在修改庫之後,靜態編譯的檔案需要再把靜態庫和原main.c檔案都重新編譯才能使用,而動態編譯的檔案不需要再編譯main.c,只需要把新編譯的動態庫覆蓋原來的動態庫,再重新執行可執行檔案即可生效;相比於編譯乙個大型工程需要一兩小時,動態庫的優勢就不必多言了;

C語言 靜態庫與動態庫

一.靜態庫 靜態庫 要被包含到源程式中的庫 1.優點執行速度快 2.缺點占用系統資源比較多 3.使用的場合對時間要求很高的場合 4.靜態庫的製作 1 把所有的源程式 c檔案 製作成目標檔案 o 檔案 gcc c mul.c o mul.o gcc c sub.c o sub.o gcc c add....

編譯靜態庫編譯動態庫

編譯靜態庫 cr標誌告訴ar將object檔案封裝 archive 我們可以使用nm s 命令來檢視.a檔案的內容 ar cr libmyhello.a hello.o 或 cvr 編譯動態庫 gcc c fpic test1.c gcc c fpic test2.c fpic告訴gcc將源 編譯成...

如何編譯為靜態庫或動態庫

要將專案編譯為庫,使用cmake的add library命令 add library static shared module exclude from all source1 source2 sourcen 其中,引數static,shared,module指定生成庫是靜態庫 動態庫或module...