如何在Win 7 x64 VS2012上使用node-gyp构建本机Node.js扩展?

时间:2014-02-06 19:12:22

标签: node.js windows-7 64-bit

我尝试按照tutorial如何在Win 7 x64(VS2012)上构建本机Node.js扩展。我为扩展创建了一个新目录,并创建了hello.cc和bindings.gyp文件。接下来,我打开了一个cmd并更改为扩展目录。我运行了以下命令:+

D:\git\ndext>node-gyp configure --msvs_version=2012
gyp info it worked if it ends with ok
gyp info using node-gyp@0.12.2
gyp info using node@0.10.25 | win32 | x64
gyp info spawn python
gyp info spawn args [ 'C:\\Users\\abc\\AppData\\Roaming\\npm\\node_modules\\node-gyp\\gyp\\gyp_main.py',
gyp info spawn args   'binding.gyp',
gyp info spawn args   '-f',
gyp info spawn args   'msvs',
gyp info spawn args   '-G',
gyp info spawn args   'msvs_version=2012',
gyp info spawn args   '-I',
gyp info spawn args   'D:\\git\\ndext\\build\\config.gypi',
gyp info spawn args   '-I',
gyp info spawn args   'C:\\Users\\abc\\AppData\\Roaming\\npm\\node_modules\\node-gyp\\addon.gypi',
gyp info spawn args   '-I',
gyp info spawn args   'C:\\Users\\abc\\.node-gyp\\0.10.25\\common.gypi',
gyp info spawn args   '-Dlibrary=shared_library',
gyp info spawn args   '-Dvisibility=default',
gyp info spawn args   '-Dnode_root_dir=C:\\Users\\abc\\.node-gyp\\0.10.25',
gyp info spawn args   '-Dmodule_root_dir=D:\\git\\ndext',
gyp info spawn args   '--depth=.',
gyp info spawn args   '--generator-output',
gyp info spawn args   'D:\\git\\ndext\\build',
gyp info spawn args   '-Goutput_dir=.' ]

之后我有一个新的目录构建,其中包含VS2012 sln和vcproj文件。试图在VS2012中构建此扩展失败:

------ Build started: Project: hello, Configuration: Debug x64 ------
1>  hello.cc
1>C:\Users\abc\.node-gyp\0.10.25\deps\v8\include\v8.h(184): warning C4506: no definition for inline function 'v8::Persistent<T> v8::Persistent<T>::New(v8::Handle<T>)'
1>          with
1>          [
1>              T=v8::Object
1>          ]
1>LINK : fatal error LNK1104: cannot open file 'C:\Users\abc\.node-gyp\0.10.25\Debug\node.lib'
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

我理解错误(链接器未在指定目录中找到node.lib)。问题是node-gyp配置出了什么问题?我忘记了另一个参数吗?

但是使用node-gyp构建在cmd上构建成功运行...

3 个答案:

答案 0 :(得分:4)

我终于找到了一个有效的解决方案(至少对我而言)。

从源代码构建node.js:

  • here下载node.js源代码。
  • 解压缩node.js源代码,打开命令行终端并切换到包含node.js源代码的目录。
  • 键入GYP_MSVS_VERSION
  • ,将环境变量set GYP_MSVS_VERSION=2012设置为VS2012
  • 要构建x64调试版本,请输入vcbuild.bat nosign debug x64;如果要构建x64发行版,请输入vcbuild.bat nosign release x64More details here

之后,node.js已成功构建。此外,VS2012 node.sln和vcprojs已由vcbuild.bat创建。在VS2012中构建也可以。

构建本机node.js扩展名 我执行了以下步骤:

  • 打开命令行终端并切换到扩展目录。
  • node-gyp假设使用默认的node_rood_dir来查找所有需要的源和库。不幸的是,在这个默认目录中,node.lib不在预期的目录中。因此,我将使用过的node_root_dir更改为以前的构建node.js源。假设node.js源目录为D:/git/node-v0.10.25/node-v0.10.25,则命令如下所示:
node-gyp configure --nodedir="D:/git/node-v0.10.25/node-v0.10.25" --msvs_version=2012

因此,我能够在VS2012内成功构建node.js扩展的调试版和发行版。

答案 1 :(得分:0)

如果您查看代码,您会注意到#include <node.h>没有#include <"node.h">。这是因为Node-GYP将Node.js源作为本机dep而不是包含文件。要直接从Visual Studio构建,您需要以某种方式指示它具有node.h(及相关文件)。

基本上,只需使用node-gyp build即可。

答案 2 :(得分:0)

如果您使用所有内容,您将看到node-gyp提供3 node.lib。 enter image description here

所以你可以在VS中设置Release build。