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大点儿的事儿就来跪求大侠指点什么的,烦。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章