閑聊c/c++ 7: 征服優(yōu)雅缭受、高效的Libuv庫(kù)之進(jìn)展篇(上)

關(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)。因此可以省略第二步

uv解決方案.png

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
新建libuv項(xiàng)目.png
選擇空項(xiàng)目.png
2) 在源文件中添加main.cpp文件,實(shí)現(xiàn)以下簡(jiǎn)單代碼并運(yùn)行匠璧,F(xiàn)5桐款,調(diào)試運(yùn)行
添加main文件.png
3) 如果運(yùn)行時(shí)報(bào)無(wú)法啟動(dòng)程序,則將exe設(shè)置為啟動(dòng)項(xiàng):
碰到錯(cuò)誤.png
設(shè)置為啟動(dòng)項(xiàng).png
4) 使用uv_wort_t進(jìn)行cpu密集計(jì)算的測(cè)試代碼,F5編譯調(diào)試

測(cè)試程序.png

參考<Visual Studio c++必要的背景知識(shí)--鏈接與編譯>

第一次鏈接錯(cuò)誤.png

F5運(yùn)行后出現(xiàn)鏈接錯(cuò)誤

5) LNK2019鏈接錯(cuò)誤夷恍,表示相關(guān)的Lib沒有被引入魔眨,觀察相關(guān)錯(cuò)誤內(nèi)容,可以確定Libuv.lib沒有被導(dǎo)入酿雪。

1遏暴、查找到Libuv.lib被編譯到的目錄

鏈接庫(kù)的位置.png

2、在LibuvTest項(xiàng)目上右擊鼠標(biāo)指黎,選擇屬性菜單朋凉,彈出libuvTest Property Pages,然后選擇Linker/input/Additional Dependencies界面

linker_input.png

3、相對(duì)路徑方式醋安,添加libuv.lib庫(kù)

添加libuv庫(kù).png

參考<Visual Studio c++必要的背景知識(shí)--鏈接與編譯>

6) 添加好libuv.lib后杂彭,繼續(xù)F5調(diào)試墓毒,仍舊有大量鏈接錯(cuò)誤:
第二次鏈接錯(cuò)誤.png
7) 解決LNK4098錯(cuò)誤,該錯(cuò)誤是由于LIBCMTD庫(kù)引起的亲怠,我們忽略該庫(kù)所计,具體如下:
忽略特定庫(kù).png
8) 解決LNK2019錯(cuò)誤,該錯(cuò)誤前面也提到過团秽,是由于沒有引入相應(yīng)的lib導(dǎo)致的主胧。

1、查看具體的鏈接錯(cuò)誤描述,可以看到和socket相關(guān)的

鏈接錯(cuò)誤.png

**2徙垫、msdn是法寶讥裤,在msdn中查找closesocket函數(shù),看看closesocket屬于哪個(gè)lib庫(kù)的? **

msdn文檔.png

3姻报、按照前面添加libuv.lib方式()己英,添加Ws2_32.lib∥庑或者也可以參考<Visual Studio c++必要的背景知識(shí)--鏈接與編譯>該文檔使用另外一種方式:#pragma comment(lib,"path")方式進(jìn)行鏈接损肛。

9) 周而復(fù)始,不斷使用8)的方式荣瑟,解決所有LNK2019鏈接錯(cuò)誤
剩余的鏈接錯(cuò)誤.png
GetAdaptersAddresses.png
GetProcessMemoryInfo.png
GetUserProfileDirectory.png
10) 最終需要的所有鏈接庫(kù)
最終需要的所有依賴庫(kù).png
11) F5繼續(xù)編譯調(diào)試治拿,正確運(yùn)行輸出結(jié)果
libuv運(yùn)行結(jié)果.png
12) 至此為止,libuv的uv_work_t的Demo能夠編譯并且正確運(yùn)行笆焰。我們也可以休息一下了劫谅!

Next:

下一篇我們關(guān)注libuv中一個(gè)重要的數(shù)據(jù)結(jié)構(gòu):QUEUE的實(shí)現(xiàn)和使用。

該結(jié)構(gòu)在多個(gè)線程之間傳送數(shù)據(jù)嚷掠,因此必須要深入了解其原理和實(shí)現(xiàn)捏检。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市不皆,隨后出現(xiàn)的幾起案子贯城,更是在濱河造成了極大的恐慌,老刑警劉巖霹娄,帶你破解...
    沈念sama閱讀 211,123評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件能犯,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡犬耻,警方通過查閱死者的電腦和手機(jī)踩晶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)枕磁,“玉大人合瓢,你說(shuō)我怎么就攤上這事⊥傅洌” “怎么了晴楔?”我有些...
    開封第一講書人閱讀 156,723評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)峭咒。 經(jīng)常有香客問我税弃,道長(zhǎng),這世上最難降的妖魔是什么凑队? 我笑而不...
    開封第一講書人閱讀 56,357評(píng)論 1 283
  • 正文 為了忘掉前任则果,我火速辦了婚禮,結(jié)果婚禮上漩氨,老公的妹妹穿的比我還像新娘西壮。我一直安慰自己,他們只是感情好叫惊,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評(píng)論 5 384
  • 文/花漫 我一把揭開白布款青。 她就那樣靜靜地躺著,像睡著了一般霍狰。 火紅的嫁衣襯著肌膚如雪抡草。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,760評(píng)論 1 289
  • 那天蔗坯,我揣著相機(jī)與錄音康震,去河邊找鬼。 笑死宾濒,一個(gè)胖子當(dāng)著我的面吹牛腿短,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播绘梦,決...
    沈念sama閱讀 38,904評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼橘忱,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了谚咬?” 一聲冷哼從身側(cè)響起鹦付,我...
    開封第一講書人閱讀 37,672評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎择卦,沒想到半個(gè)月后敲长,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,118評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡秉继,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評(píng)論 2 325
  • 正文 我和宋清朗相戀三年祈噪,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片尚辑。...
    茶點(diǎn)故事閱讀 38,599評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡辑鲤,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出杠茬,到底是詐尸還是另有隱情月褥,我是刑警寧澤弛随,帶...
    沈念sama閱讀 34,264評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站宁赤,受9級(jí)特大地震影響舀透,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜决左,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評(píng)論 3 312
  • 文/蒙蒙 一愕够、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧佛猛,春花似錦惑芭、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至码荔,卻和暖如春漩勤,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背缩搅。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工越败, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人硼瓣。 一個(gè)月前我還...
    沈念sama閱讀 46,286評(píng)論 2 360
  • 正文 我出身青樓究飞,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親堂鲤。 傳聞我的和親對(duì)象是個(gè)殘疾皇子亿傅,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容