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

标签 node.js windows-7 64-bit

我尝试遵循tutorial如何在 Win 7 x64 (VS2012) 上构建 native 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 build 在 cmd 上构建成功运行...

最佳答案

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

从源代码构建node.js:

  • here下载node.js源代码.
  • 提取node.js源代码,打开命令行终端并更改到包含node.js源代码的目录。
  • 通过输入 set GYP_MSVS_VERSION=2012 将环境变量 GYP_MSVS_VERSION 设置为 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_root_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 扩展的调试和发布版本。

关于node.js - 如何在 Win 7 x64 VS2012 上使用 node-gyp 构建原生 Node.js 扩展?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21611867/

相关文章:

windows-7 - ng 不被识别为内部或外部命令

c++ - Visual C++ 2010 Express x64 程序集

javascript - Node.js 注册表

javascript - Node.js Promise 在没有被调用的情况下运行

performance - Windows 7 上的 Subversion 慢得让人难以忍受

c - C语言中以毫或微秒为单位测量时间

node.js - 删除未使用的导入是否会对 Reactjs 中的包大小和构建时间产生影响

node.js - EC2 实例的端口 80 上的 IIS/Node 服务器问题

c++ - 在 C++ 编译期间混合 x86 和 x64 静态库

c++ - 哪种整数数据类型最有效地使用 x64 CPU 内核?