版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第C++封裝靜態(tài)鏈接庫和使用的詳細(xì)步驟目錄零碎記事為什么要把程序封裝成庫博主的環(huán)境封裝步驟準(zhǔn)備好待封裝的程序開始封裝配置項(xiàng)目編譯找到編譯好的靜態(tài)庫打包使用靜態(tài)庫使用步驟包含頭文件添加鏈接路徑源文件設(shè)置項(xiàng)目設(shè)置
零碎記事
距離上次發(fā)博客已經(jīng)有一年半了,轉(zhuǎn)眼間我也是從做圖像研究到了做游戲開發(fā),說起來看看前面的博文,本來就有前兆的東西呢(笑)......因?yàn)橹饕€是在使用虛幻引擎,所以C++的東西會(huì)碰到多一些。
以后程序技術(shù)方面的文章就放博客,游戲設(shè)計(jì)相關(guān)的雜談就放知乎那邊吧,博主的知乎可以通過友鏈過去。
B站那邊的賬號也打算開始復(fù)活,后面是更新游戲設(shè)計(jì)雜談?lì)惖囊曨l還是更新虛幻技術(shù)方面的視頻還在猶豫不決......
為什么要把程序封裝成庫
有時(shí)我們需要把自己的程序交給第三方調(diào)用,但是又不想被別人看到自己的具體實(shí)現(xiàn)代碼,就封裝成庫給別人使用。庫有動(dòng)態(tài)鏈接庫和靜態(tài)鏈接庫,區(qū)別是動(dòng)態(tài)鏈接庫可以在程序運(yùn)行時(shí)動(dòng)態(tài)鏈接,而靜態(tài)鏈接庫相當(dāng)于.cpp文件,在編譯時(shí)的鏈接階段就鏈接進(jìn)去了。
博主的環(huán)境
系統(tǒng):Window10
IDE:VS2025
如果在使用的是其他IDE的,看完這個(gè)其實(shí)自己應(yīng)該也能知道用其他IDE該怎么操作,其實(shí)就是一個(gè)對編譯和鏈接過程的理解深度的問題,懂了在哪里都能自己封裝和使用庫的。
這邊的演示有中文路徑,VS對中文路徑支持得確實(shí)還挺可以的,不會(huì)報(bào)錯(cuò)。不過建議大家還是盡量別這樣了,就怕萬一你那邊對中文路徑支持不好,編譯出問題。
封裝步驟
準(zhǔn)備好待封裝的程序
我準(zhǔn)備了一個(gè)Point類,就當(dāng)做是要給別人用的,現(xiàn)在我就把這個(gè)類封裝成靜態(tài)庫。
//Point.h
#pragmaonce
#includeutility
typedefstd::pairint,intCoordinate;
classPoint
private:
Coordinatelocation;
public:
Point();
Point(intx,inty);
CoordinateGetLocation();
intGetX()const;
intGetY()const;
virtualPointoperator+(constPointB)const;
virtualPointoperator-(constPointB)const;
};
//Point.cpp
#include"Point.h"
Point::Point():
location(Coordinate(0,0))
Point::Point(intx,inty):
location(Coordinate(x,y))
CoordinatePoint::GetLocation()
returnlocation;
intPoint::GetX()const
returnlocation.first;
intPoint::GetY()const
returnlocation.second;
PointPoint::operator+(constPointB)const
returnPoint(GetX()+B.GetX(),GetY()+B.GetY());
PointPoint::operator-(constPointB)const
returnPoint();
}
開始封裝
配置項(xiàng)目
平常我們是編譯成可執(zhí)行文件(即.exe),現(xiàn)在我們設(shè)置一下,改成編譯成靜態(tài)庫(即.lib)。
這個(gè)設(shè)置在VS2025里是這樣的:
右擊項(xiàng)目-屬性-配置屬性-常規(guī)-配置類型-改為靜態(tài)庫
這樣我們編譯出來的東西就不是.exe文件,而是.lib文件了,也就是靜態(tài)鏈接庫。
編譯
這邊在VS2025里,編譯就是生成。
就跟編譯普通程序一樣,編譯成功。
找到編譯好的靜態(tài)庫
自己翻翻項(xiàng)目下面的文件夾,能找到編譯出來的靜態(tài)庫的。
我這邊是項(xiàng)目根目錄/x64/Debug/項(xiàng)目名.lib,就是下圖里的那個(gè)Point.lib,這就是靜態(tài)庫。
打包
其實(shí)就是把頭文件跟靜態(tài)庫一起給別人就行了,靜態(tài)庫的作用跟.cpp文件差不多,使用時(shí)就是包含頭文件,然后鏈接到靜態(tài)庫把實(shí)現(xiàn)關(guān)聯(lián)起來即可。
使用靜態(tài)庫使用步驟包含頭文件
新建了個(gè)項(xiàng)目,這個(gè)項(xiàng)目要用到我的那個(gè)Point類,為了方便包含頭文件,我把上邊的那個(gè)有Point.h有和Point.lib的文件夾挪到新項(xiàng)目文件夾下了。
新建了個(gè)程序,要用到我寫的那個(gè)Point類,那就先包含Point.h,里面有關(guān)于Point類的聲明。
//使用靜態(tài)庫.cpp
#includeiostream
#include"大摸魚師千里的Point類/Point.h"
usingnamespacestd;
intmain()
Pointa(1,2);
Pointb(3,4);
Pointc=a+b;
coutc.GetX()","c.GetY()endl;
return0;
}
但是這個(gè)時(shí)候編譯還是通不過的,如下圖報(bào)了無法解析外部符號,是鏈接的錯(cuò)誤來的。頭文件雖然有Point類聲明信息,但沒有實(shí)現(xiàn)的信息,實(shí)現(xiàn)的信息在靜態(tài)庫里,但是現(xiàn)在鏈接器還找不到靜態(tài)庫,所以報(bào)錯(cuò)了。
添加鏈接路徑
有兩種方法,一種是在源文件里設(shè)置,另一種是在項(xiàng)目里設(shè)置。
源文件設(shè)置
先講在源文件里設(shè)置,其實(shí)就是加個(gè)編譯頭告訴鏈接器靜態(tài)庫的路徑而已,語法如下:
#pragmacomment(lib,你的靜態(tài)庫路徑)
這樣子鏈接器在搜索默認(rèn)的庫文件路徑外,還會(huì)搜你這里的設(shè)的靜態(tài)庫路徑。
在我這里,加了就是會(huì)變成這樣:
//使用靜態(tài)庫.cpp
#includeiostream
#include"大摸魚師千里的Point類/Point.h"
usingnamespacestd;
#pragmacomment(lib,"大摸魚師千里的Point類/Point.lib")
intmain()
Pointa(1,2);
Pointb(3,4);
Pointc=a+b;
coutc.GetX()","c.GetY()endl;
return0;
}
因?yàn)殒溄悠髡业铰窂搅?,編譯就能過了,程序正常運(yùn)行,效果如下。
項(xiàng)目設(shè)置
VS2025里是這么設(shè)置鏈接器搜索的庫目錄的
先是設(shè)置庫的目錄,項(xiàng)目屬性-VC++目錄-庫目錄-編輯-新行-把靜態(tài)庫所在目錄添加進(jìn)去
因?yàn)檫@個(gè)時(shí)候只是加了搜索的庫目錄,但是還沒有具體到哪個(gè)庫,可以像上邊那樣用編譯頭來指定,就是不加相對路徑直接指定靜態(tài)庫,就像這樣。
#pragmacomment(l
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 山泉小學(xué)教學(xué)常規(guī)管理制度(3篇)
- 項(xiàng)目管理制度及格式范文(3篇)
- 茶室品茗活動(dòng)策劃方案(3篇)
- 教育管理制度學(xué)習(xí)體會(huì)(3篇)
- 2026年河北唐山中心醫(yī)院腎內(nèi)科急聘英才1名考試參考試題及答案解析
- 2026年福建莆田礪志高級中學(xué)多學(xué)科教師招聘若干人備考考試題庫及答案解析
- 海南儋州市2026屆教育部直屬師范大學(xué)公費(fèi)師范畢業(yè)生供需見面招聘24人(一)備考考試題庫及答案解析
- 2026北京航空航天大學(xué)集成電路科學(xué)與工程學(xué)院聘用編科研助理F崗招聘1人備考考試題庫及答案解析
- 2025湖南郴州市永興縣基層醫(yī)療衛(wèi)生單位招聘專業(yè)技術(shù)人員選崗15人備考考試題庫及答案解析
- 2026北京北化化學(xué)科技有限公司招聘15人考試備考題庫及答案解析
- 棄土場規(guī)范規(guī)章制度
- 2026年水下機(jī)器人勘探報(bào)告及未來五至十年深海資源報(bào)告
- 安徽省蕪湖市鳩江區(qū)2024-2025學(xué)年高一上學(xué)期期末考試生物試卷
- 公司干部調(diào)研方案
- 無糾紛自愿離婚協(xié)議書
- 四川省高等教育自學(xué)考試畢業(yè)生登記表【模板】
- 專題五 以新發(fā)展理念引領(lǐng)高質(zhì)量發(fā)展
- GB/T 22417-2008叉車貨叉叉套和伸縮式貨叉技術(shù)性能和強(qiáng)度要求
- GB/T 20145-2006燈和燈系統(tǒng)的光生物安全性
- GB/T 1.1-2009標(biāo)準(zhǔn)化工作導(dǎo)則 第1部分:標(biāo)準(zhǔn)的結(jié)構(gòu)和編寫
- 長興中學(xué)提前招生試卷
評論
0/150
提交評論