在Windows下编译安装Node.js和开发C/C++原生扩展(Nodejs相关)
在Windows下编译安装Node.js和开发C/C++原生扩展(Nodejs相关)
加油啊!再搞一篇linux下的C/C++原生扩展开发吧。
在 Windows 下编译安装 Node.js 和开发 C/C++ 原生扩展
在 Windows 系统上编译安装 Node.js 并开发 C/C++ 原生扩展是一个常见的需求。下面将详细介绍如何完成这一过程。
编译安装 Node.js
-
下载源码 首先,从 Node.js 的 GitHub 仓库下载源码:
git clone https://github.com/nodejs/node.git cd node
-
安装依赖 使用
vcbuild.bat
脚本来安装必要的依赖。确保你已经安装了 Visual Studio,并且配置好了环境变量。vcbuild.bat
-
编译 Node.js 使用
vcbuild.bat
来编译 Node.js:vcbuild.bat release
这会生成一个可执行文件
node.exe
。 -
安装 Node.js 将编译好的
node.exe
和其他必要的文件复制到你的系统路径中,例如C:\Program Files\nodejs
。
开发 C/C++ 原生扩展
假设你已经有一个 Node.js 环境,并希望开发一个简单的 C/C++ 扩展。
-
创建项目结构 创建一个新的目录来存放你的扩展文件,例如
my-addon
,并在其中创建以下文件:my-addon/ ├── binding.gyp ├── addon.cc └── index.js
-
编写
binding.gyp
文件binding.gyp
是一个构建配置文件,定义了如何编译你的扩展。例如:{ "targets": [ { "target_name": "addon", "sources": [ "addon.cc" ] } ] }
-
编写
addon.cc
文件 这是你的 C++ 代码文件。例如,实现一个简单的加法函数:#include <node.h> #include <v8.h> using namespace v8; Handle<Value> Add(const Arguments& args) { HandleScope scope; int a = args[0]->Int32Value(); int b = args[1]->Int32Value(); return scope.Close(Integer::New(a + b)); } void Init(Handle<Object> exports) { exports->Set(String::NewSymbol("add"), FunctionTemplate::New(Add)->GetFunction()); } NODE_MODULE(addon, Init)
-
编写
index.js
文件 创建一个 JavaScript 文件来加载和使用你的扩展:const addon = require('./build/Release/addon'); console.log(addon.add(5, 3)); // 输出 8
-
构建扩展 在命令行中运行以下命令来构建扩展:
node-gyp configure build
-
测试扩展 运行你的 JavaScript 文件以测试扩展是否正常工作:
node index.js
通过以上步骤,你可以在 Windows 系统上成功编译安装 Node.js 并开发 C/C++ 原生扩展。如果你有兴趣了解 Linux 下的开发流程,可以参考类似的步骤进行操作。
为毛我下的源码没有 deps\uv\src\ev\ 这个目录?
谢谢分享,昨天成功编译。 补充一下,还需要安装Python2,node-v0.6.15没有deps\uv\src\ev目录。
Visual Studio 好大 好可怕
请问一下楼主,您是怎么知道这些信息的。在官方文档里貌似没有啊
这只能说明楼主之前是做c开发的
我刚才对楼主的文章进行了补充:http://cnodejs.org/topic/527de7ced2b3893f2a13ac34
我在使用VS2017 编译node v8.11.2 的时候。在控制台输入 vcbuild.bat 命令,运行结束后。在生成的Release 目录下并没有生成node.exe , 在输入的日志里只发现了 “MSBUILD : error MSB4166: 子节点“2”过早退出。正在关闭。可以在临时文件目录中名为 MSBuild_*.failure.txt 的文件内找到诊断信息。” 这个错误信息,但是我想找这个文件,在win里全局搜索,但是没有找到。求解