VS 2008 也能玩轉 Node.JS!

VS 2008 也能玩轉 Node.JS!


閱讀 Node.JS 官方文檔以及很多網友的相關文章,口徑一致地提到編譯 Node.JS 的 C++ 擴展要使用 VS 2010,抱着僥倖心理,用 VS 2008 成功編譯了我自己編寫的一個項目和別的幾個項目(包括著名的 Socket.IO),一切順利,而且編譯出來的.node文件也運行良好。
由於某項目需要編寫阻塞性的程序,多方比較之下,決定試一下 fibers,問題出來了:
error MSB6006: "VCBuild.exe" exited with code -1
在網上搜了半天,都說用 VS 2010 就好了,可我就是懶得去安裝,2008 用久了,順手。想當年,一直用 VC6 然後跳到 VS 2005,估計我下次換版本該是 VS 2018 了。
想想問題可能就在 fibers.vcproj 這個文件上了,打開看看,再打開以前寫的某個 .vcproj 文件作爲對比,很快就找到兩者的差異了(牛人就是牛人,不服不行吧?)。


fibers.vcproj 最後有這麼一段:
<Files>
<Filter Name="src">
<File RelativePath="..\src\fibers.cc"/>
</Filter>
<Filter Name="src">
<File RelativePath="..\src\coroutine.cc"/>
</Filter>
<Filter Name="src">
<Filter Name="libcoro">
<File RelativePath="..\src\libcoro\coro.c"/>
</Filter>
</Filter>
<Filter Name="src">
<File RelativePath="..\src\coroutine.h"/>
</Filter>
<Filter Name="src">
<Filter Name="libcoro">
<File RelativePath="..\src\libcoro\coro.h"/>
</Filter>
</Filter>
<File RelativePath="..\binding.gyp"/>
</Files>


手工改成這樣:
<Files>
<Filter Name="src">
<File RelativePath="..\src\fibers.cc"/>
<File RelativePath="..\src\coroutine.cc"/>
<File RelativePath="..\src\coroutine.h"/>
<Filter Name="libcoro">
<File RelativePath="..\src\libcoro\coro.c"/>
<File RelativePath="..\src\libcoro\coro.h"/>
</Filter>
</Filter>
<File RelativePath="..\binding.gyp"/>
</Files>
保存,然後用 IDE 打開,編譯....OK!(忍不住再自誇一遍)
那爲什麼前面編譯的幾個項目沒出錯呢?原來他們有個共同的特點,都是單個.cc文件,因此碰巧繞過了這一兼容性的坑,而 fibers 有5個源文件,Duang....


另外,看到有人在討論中說 VS 2010 編譯64位也出問題,我用 2008 照樣順利編譯,關鍵點:
1、在連接庫列表裏,填寫正確的 node 庫(C:\Users\suntongo\.node-gyp\0.10.40\x64\node.lib);
2、填寫64位通用庫文件所在的路徑(C:\Program Files\Microsoft SDKs\Windows\v6.0A\Lib\x64);
3、如果不清楚這兩步的操作,請自行摸索,不要P大點兒的事兒就來跪求大俠指點什麼的,煩。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章