天天看點

使用C語言編譯動态庫與靜态庫

如何使用C語言編譯動态庫與靜态庫

關于C語言動态庫與靜态庫的作用這裡就不在詳細贅述了,重點說一下如何編譯動态庫與靜态庫及使用,一些大型的程式一般擁有着良好的架構,各個功能子產品之間能夠互相協調工作,達到預期的效果,但有的程式并不是所有的源碼都是自己編寫,特别像是用到晶片廠商的提供的庫;能夠把這些融合起來的就是需要提供的庫;希望對大家學習C語言有所幫助。

原料: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/C+頻道!

繼續閱讀