關(guān)于上一篇中提到的精簡(jiǎn)libuv庫(kù)胁澳,剝離出一個(gè)僅包含線程池的實(shí)現(xiàn)。
放棄了米者!
主要是代碼太多了韭畸,依賴性分析太耗時(shí)間宇智。
概要:
1) 如何編譯libuv庫(kù)
2) 在測(cè)試libuv庫(kù)的時(shí)候,如何解決各種鏈接錯(cuò)誤
3) 重點(diǎn)是根據(jù)鏈接錯(cuò)誤編號(hào)
通過msdn來(lái)定位問題胰丁、分析問題以及解決問題
掌握方法學(xué)是關(guān)鍵
1随橘、libuv庫(kù)的下載以及在windows中編譯
下載地址:https://github.com/libuv/libuv
編譯:
1) 安裝python2.,6或者2.7版本,并設(shè)置好環(huán)境變量锦庸。千萬(wàn)別安裝3.0或以上版本机蔗。
目前很多跨平臺(tái)庫(kù),都通過python腳本進(jìn)行編譯或引導(dǎo)甘萧,因此python是必裝程序萝嘁。
2) 在cmd中:
cd到你libuv所在目錄
并輸入 git clone https://chromium.googlesource.com/external/gyp.git build/gyp
將google gyp系統(tǒng)克隆到libuv所在目錄的build/gyp文件夾下面
由于GFW的關(guān)系,google網(wǎng)站無(wú)法訪問扬卷,作為程序員牙言,我想你應(yīng)該有辦法
3) 運(yùn)行l(wèi)ibuv所在目錄下的vcbuild.bat,生成visual studio解決方案。雙擊運(yùn)行,然后F5編譯調(diào)試怪得,一切盡在掌握中咱枉!
實(shí)際上只要你翻墻,直接運(yùn)行vcbuild.bat徒恋,如果沒安裝過gyp的話蚕断,自動(dòng)會(huì)下載gyp構(gòu)建系統(tǒng)。因此可以省略第二步
2因谎、如何測(cè)試運(yùn)行:
因?yàn)長(zhǎng)ibuv在windows中編譯后的結(jié)果是一個(gè)靜態(tài)鏈接庫(kù)基括,那么我們需要重新建個(gè)exe工程,并將libuv.lib鏈接入exe這個(gè)程序财岔,步驟如下:
1) 新建一個(gè)win32/控制臺(tái)/空項(xiàng)目风皿,名稱例如:LibuvTest
2) 在源文件中添加main.cpp文件,實(shí)現(xiàn)以下簡(jiǎn)單代碼并運(yùn)行匠璧,F(xiàn)5桐款,調(diào)試運(yùn)行
3) 如果運(yùn)行時(shí)報(bào)無(wú)法啟動(dòng)程序,則將exe設(shè)置為啟動(dòng)項(xiàng):
4) 使用uv_wort_t進(jìn)行cpu密集計(jì)算的測(cè)試代碼,F5編譯調(diào)試
參考<Visual Studio c++必要的背景知識(shí)--鏈接與編譯>
F5運(yùn)行后出現(xiàn)鏈接錯(cuò)誤
5) LNK2019鏈接錯(cuò)誤夷恍,表示相關(guān)的Lib沒有被引入魔眨,觀察相關(guān)錯(cuò)誤內(nèi)容,可以確定Libuv.lib沒有被導(dǎo)入酿雪。
1遏暴、查找到Libuv.lib被編譯到的目錄
2、在LibuvTest項(xiàng)目上右擊鼠標(biāo)指黎,選擇屬性菜單朋凉,彈出libuvTest Property Pages,然后選擇Linker/input/Additional Dependencies界面
3、相對(duì)路徑方式醋安,添加libuv.lib庫(kù)
參考<Visual Studio c++必要的背景知識(shí)--鏈接與編譯>
6) 添加好libuv.lib后杂彭,繼續(xù)F5調(diào)試墓毒,仍舊有大量鏈接錯(cuò)誤:
7) 解決LNK4098錯(cuò)誤,該錯(cuò)誤是由于LIBCMTD庫(kù)引起的亲怠,我們忽略該庫(kù)所计,具體如下:
8) 解決LNK2019錯(cuò)誤,該錯(cuò)誤前面也提到過团秽,是由于沒有引入相應(yīng)的lib導(dǎo)致的主胧。
1、查看具體的鏈接錯(cuò)誤描述,可以看到和socket相關(guān)的
**2徙垫、msdn是法寶讥裤,在msdn中查找closesocket函數(shù),看看closesocket屬于哪個(gè)lib庫(kù)的? **
3姻报、按照前面添加libuv.lib方式()己英,添加Ws2_32.lib∥庑或者也可以參考<Visual Studio c++必要的背景知識(shí)--鏈接與編譯>該文檔使用另外一種方式:#pragma comment(lib,"path")方式進(jìn)行鏈接损肛。
9) 周而復(fù)始,不斷使用8)的方式荣瑟,解決所有LNK2019鏈接錯(cuò)誤
10) 最終需要的所有鏈接庫(kù)
11) F5繼續(xù)編譯調(diào)試治拿,正確運(yùn)行輸出結(jié)果
12) 至此為止,libuv的uv_work_t的Demo能夠編譯并且正確運(yùn)行笆焰。我們也可以休息一下了劫谅!
Next: