日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【转】C语言如何编译动态库与静态库?

發(fā)布時間:2025/3/15 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【转】C语言如何编译动态库与静态库? 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.


因為是別的論壇,不能直接轉(zhuǎn)載,自己在這里再粘貼一下——
轉(zhuǎn)載網(wǎng)址:https://www.2cto.com/kf/201711/699202.html

關(guān)于動態(tài)庫與靜態(tài)庫的作用這里就不在詳細(xì)贅述了,重點說一下如何編譯動態(tài)庫與靜態(tài)庫及使用,一些大型的程序一般擁有著良好的架構(gòu),各個功能模塊之間能夠相互協(xié)調(diào)工作,達(dá)到預(yù)期的效果,但有的程序并不是所有的源碼都是自己編寫,特別像是用到芯片廠商的提供的庫;能夠把這些融合起來的就是需要提供的庫;

原料:test1.c test2.cmain.c

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

1.如何編譯動態(tài)庫

gcc test1.ctest2.c -shared -fPIC -o libtest.so

使用動態(tài)庫

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

(

-L : 表示需要庫的路徑

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

)

(ps:執(zhí)行a.out時有可能提示找不到libtest.so文件,這時需要把庫文件放入到/lib等目錄下,或者添加環(huán)境變量LD_LIBRARY_PATH,包含有庫文件的路徑即可)

2.如何編譯靜態(tài)庫

gcc -c test1.ctest2.c

ar -r libtest.atest1.o test2.o

使用靜態(tài)庫

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

(

-static:可強(qiáng)制編譯時使用靜態(tài)庫,如果不使用這個參數(shù),而靜態(tài)庫與動態(tài)庫同名的話,會優(yōu)先使用動態(tài)庫

)

3.靜態(tài)庫與動態(tài)庫

在可執(zhí)行程序執(zhí)行條件上,使用靜態(tài)庫編譯時,生成的執(zhí)行文件就不再依賴.a靜態(tài)庫文件,而使用動態(tài)庫編譯的執(zhí)行文件必須包含.so庫文件才能運行;

在可執(zhí)行程序的執(zhí)行速度上,靜態(tài)編譯的文件會優(yōu)于動態(tài)編譯(畢竟靜態(tài)編譯把庫文件的代碼都編譯到執(zhí)行文件,與動態(tài)編譯不同在執(zhí)行動態(tài)庫中函數(shù)時才會去路徑下的動態(tài)庫中尋找鏈接);

在可執(zhí)行程序的大小上,靜態(tài)編譯后的文件大小比動態(tài)編譯的文件大很多;如果對內(nèi)存要求較高的可選擇用動態(tài)編譯,雖然會慢一點;

在修改庫之后,靜態(tài)編譯的文件需要再把靜態(tài)庫和原main.c文件都重新編譯才能使用,而動態(tài)編譯的文件不需要再編譯main.c,只需要把新編譯的動態(tài)庫覆蓋原來的動態(tài)庫,再重新運行可執(zhí)行文件即可生效;相比于編譯一個大型工程需要一兩小時,動態(tài)庫的優(yōu)勢就不必多言了;

?

總結(jié)

以上是生活随笔為你收集整理的【转】C语言如何编译动态库与静态库?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。