五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

C/C++編程筆記:C++靜態(tài)庫與動態(tài)庫有何不同?本文帶你弄懂!

2020-09-21 21:49 作者:C語言編程__Plus  | 我要投稿

在日常開發(fā)中,其實(shí)大部分時間我們都會和第三方庫或系統(tǒng)庫打交道。在 Android 開發(fā)音視頻開發(fā)領(lǐng)域,一般會用到 FFmepg、OpenCV、OpenGL 等等開源庫, 我們一般都會編譯成動態(tài)庫共我們程序使用。對于類 unix 系統(tǒng),靜態(tài)庫為 .a, 動態(tài)庫為 .so。而 windows 系統(tǒng)靜態(tài)庫為 .lib, 動態(tài)庫為.dll。


靜態(tài)鏈接庫

回顧程序編譯的四個步驟:

預(yù)編譯 -> 編譯 -> 匯編 -> 鏈接

靜態(tài)庫和動態(tài)庫就是在鏈接階段行為不同,靜態(tài)庫會在鏈接階段將匯編生成的目標(biāo)文件 .o 與引用的庫一起鏈接打包到可執(zhí)行文件中。靜態(tài)庫其實(shí)就是一系列目標(biāo)文件的集合,可以用 ar 工具打包生成。靜態(tài)庫特點(diǎn)有:

靜態(tài)庫對函數(shù)的鏈接在編譯時期完成

程序在運(yùn)行時與函數(shù)庫再無關(guān)系

浪費(fèi)資源空間,因?yàn)樗邢嚓P(guān)的目標(biāo)文件都會被鏈接到一個可執(zhí)行文件中

我們來看一個例子:


使用 clang 生成編譯成目標(biāo)文件

clang++ -c Math.cpp

接著使用 ar 命令打包目標(biāo)文件,生成靜態(tài)庫文件 libmath.a

ar -r libmath.a Math.o

ar 命令有一些常用參數(shù):

(1)-t: 按順序顯示歸檔中的文件名

(2)-d: 從歸檔中刪除指定文件

鏈接靜態(tài)庫

clang++ main.cpp -L. -lmath -o main

生成成功后,執(zhí)行 ./main 執(zhí)行

解釋下參數(shù):

(1)-L: 表示要鏈接的庫所在目錄,如果不指定就會在系統(tǒng) usr/lib 或 usr/local/lib 下查找

(2)-l: 指定鏈接時的動態(tài)庫或靜態(tài)庫,如果有動態(tài)將會優(yōu)先被鏈接



動態(tài)鏈接庫

使用動態(tài)庫的原因,正式因?yàn)殪o態(tài)庫很耗費(fèi)內(nèi)存空間,并且靜態(tài)庫更新簡直是災(zāi)難,如果庫源碼發(fā)生變動,那么靜態(tài)庫將不得不重新生成。

動態(tài)庫特點(diǎn)如下:

延遲加載一些庫函數(shù),既用到才加載

動態(tài)庫可以同時被多個程序共享,節(jié)省內(nèi)存

借著上面的例子,顯示動態(tài)庫的使用,首先,生成動態(tài)鏈接庫文件

clang++ Math.o -shared -fPIC -Wall -o libmath.so

生成動態(tài)鏈接庫文件后,再使用如下命令生成可執(zhí)行文件

clang++ main.cpp -L. -lmath -o main

執(zhí)行 ./main


參數(shù)說明:

(1)-shared: 表示生成的是動態(tài)鏈接庫

(2)-fPIC: 生成位置獨(dú)立的代碼,用于編譯共享庫。在任意內(nèi)存空間都可以被加載

(3)-Wall: 生成所有警告信息

另外如果你想更好的提升你的編程能力,學(xué)好C語言C++編程!彎道超車,快人一步!

分享(源碼、項(xiàng)目實(shí)戰(zhàn)視頻、項(xiàng)目筆記,基礎(chǔ)入門教程)

歡迎轉(zhuǎn)行和學(xué)習(xí)編程的伙伴,利用更多的資料學(xué)習(xí)成長比自己琢磨更快哦!

學(xué)習(xí)C/C++編程知識,提升C/C++編程能力,歡迎關(guān)注UP一起來成長!
另外,UP在主頁上傳了一些學(xué)習(xí)C/C++編程的視頻教程,有興趣或者正在學(xué)習(xí)的小伙伴一定要去看一看哦!會對你有幫助的~


C/C++編程筆記:C++靜態(tài)庫與動態(tài)庫有何不同?本文帶你弄懂!的評論 (共 條)

分享到微博請遵守國家法律
高碑店市| 铜陵市| 得荣县| 阿拉善左旗| 文化| 乌拉特前旗| 肥东县| 施甸县| 台湾省| 罗江县| 汝州市| 淳安县| 彭阳县| 灵丘县| 铜鼓县| 深水埗区| 阿克苏市| 西宁市| 卢龙县| 浦东新区| 武定县| 英超| 乳山市| 玉树县| 筠连县| 平山县| 广丰县| 洛扎县| 福清市| 万盛区| 湟中县| 益阳市| 甘肃省| 扎鲁特旗| 防城港市| 禄劝| 琼海市| 获嘉县| 自治县| 佛坪县| 通州市|