最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(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)庫有何不同?本文帶你弄懂!的評論 (共 條)

分享到微博請遵守國家法律
临夏县| 平邑县| 阿瓦提县| 灌阳县| 三都| 民乐县| 张掖市| 汽车| 吉林省| 滨州市| 保亭| 天水市| 农安县| 竹北市| 全椒县| 阳原县| 久治县| 二手房| 滦南县| 吐鲁番市| 德惠市| 印江| 梧州市| 鹿邑县| 武穴市| 蓬安县| 阜阳市| 高要市| 赣榆县| 镇巴县| 乐亭县| 鄯善县| 保德县| 宣威市| 宣武区| 泰州市| 濮阳市| 张家口市| 唐海县| 探索| 虞城县|