准备工作

(1)本机系统说明:本人机器为win7 64位,32位也可以。

(2)软件安装:

  VISUAL C++ 2010 EXPRESS(Visual Studio 2010也可以);

  windows下安装NodeJS,可以从官网http://www.nodejs.org下载msi版进行快捷安装;

(3)源码准备:从官网下载Source Code版本node-v0.10.5.tar(笔者下载时的最新代码版本为v0.10.5),解压到windows任意目录下,如D:\node-v0.10.5。

编写node的C/C++原生扩展

[1]打开Windows命令行cmd.exe,进入D:\node-v0.10.5,执行vcbuild.bat release,最后会在D:\node-v0.10.5\Release目录下可以找到编译好的node.exe、node.lib等文件。

[2]制作编译安装批处理文件,此处命名为nodins.bat,文件内容如下:

@echo off
if "%1"=="" goto help
mkdir "%1"
mkdir "%1"\include copy /y src\node.h "%1"\include
copy /y src\node_object_wrap.h "%1"\include
copy /y src\node_buffer.h "%1"\include
copy /y src\node_version.h "%1"\include copy /y deps\v8\include\*.h "%1"\include\ copy /y deps\uv\include\*.h "%1"\include\ mkdir "%1"\include\uv-private
copy /y deps\uv\include\uv-private\*.h "%1"\include\uv-private mkdir "%1"\include\ev
copy /y deps\uv\src\ev\*.h "%1"\include\ev mkdir "%1"\include\c-ares
copy /y deps\uv\include\ares.h "%1"\include\c-ares
copy /y deps\uv\include\ares_version.h "%1"\include\c-ares mkdir "%1"\lib
copy /y Release\node.lib "%1"\lib copy /y Release\node.exe "%1" echo =================================
echo Install succeefully!
goto exit if not errorlevel 0 echo Error "install-path" & goto exit :help
echo nodins.bat install-path :exit

[3]打开Windows命令行cmd.exe,切换 进入D:\node-v0.10.5目录。将文件nodins.bat拷贝到D:\node-v0.10.5中,在命令行执行:nodins.bat D:\nodejs,则生成编译C/C++扩展的编译环境(包括头文件、库和可执行文件)D:\nodejs目录,内容如下:

[4]用Visual Studio 2010创建一个DLL工程空白工程hellonode放在D:\目录下,新建项目—>win32控制台程序,然后进入如下页面:

[5]创建一个C++文件如hellonode.cpp,代码如下:

#define BUILDING_NODE_EXTENSION
#include <node.h> using namespace v8; Handle<Value> Hello(const Arguments& args) {
HandleScope scope;
return scope.Close(String::New("Hello world!"));
} Handle<Value> Add(const Arguments& args) {
HandleScope scope; if (args.Length() < 2) {
ThrowException(Exception::TypeError(String::New("Wrong number of arguments")));
return scope.Close(Undefined());
} if (!args[0]->IsNumber() || !args[1]->IsNumber()) {
ThrowException(Exception::TypeError(String::New("Wrong arguments")));
return scope.Close(Undefined());
} Local<Number> num = Number::New(args[0]->NumberValue() +
args[1]->NumberValue());
return scope.Close(num);
} void init(Handle<Object> target) {
NODE_SET_METHOD(target, "hello", Hello);
NODE_SET_METHOD(target, "add", Add);
} NODE_MODULE(hellonode, init)

[6]在工程属性的配置属性-常规中将输出目录改为.\;

[7]在工程属性的配置属性-常规中将目标文件扩展名改为.node;

[8]在工程属性的配置属性-C/C++-常规-附加包含目录添加头文件目录为:D:\nodejs\include

[9]在工程属性的配置属性-链接器-常规-附加库目录添加目录:D:\nodejs\lib

[10]在工程属性的配置属性-链接器-输入-附加依赖项添加lib库:node.lib

[11]编译生成后在D:\hellonode\hellonode中生成一个文件hellonode.node;

[12]在D:\hellonode目录创建js测试代码test.js,代码如下:

var addons = require('./hellonode');
console.log('C/C++ addons.hello() =', addons.hello());
console.log('C/C++ addons.add(200, 300) =', addons.add(200, 300));

[13]在命令行执行node .\test.js(若未配置node.exe的路径变量,则执行:D:\nodejs\node .\test.js),显示:

编译生成可能遇到的问题

[1]fatal error LNK1112: 模块计算机类型“X86”与目标计算机类型“x64”冲突

原因:win7下的64位系统,在运行程序的时候,需要的DLL必须是64位系统编译的,VS2010也必须在安装的时候,选择了32位编译的支持。如果安装的时候,已经选择了,那么出现该问题的解决办法:

(1)右键项目名,点击属性,弹出项目属性页,找到链接器----高级,修改右侧的目标计算机,选择有X64的那个选项。

(2)右键项目名,选择清理解决方案,清理完之后选择X64平台编译器,然后重新生成解决方案,便可以调试成功。选择X64平台编译器如下图:

如果如果在选择平台的下拉列表里找不到x64,则说明系统没有安装支持64位编译,则可以找VS安装文件进行增量安装。

[2]fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏

安装多个VS版本会 出现这个问题,解决方法一般如下:

a)微软官方给出的具体解决方法是给VS2010打SP1补丁,下载地址如下:http://www.microsoft.com/zh-cn/download/details.aspx?id=23691.安装完重新生成,如果不行,试下一方法。

b)微软官方的l另一个解决方案:http://support.microsoft.com/kb/320216/zh-cn。发现是嵌入清单的问题,于是对该工程以及所有依赖工程进行如下操作:

右键->工程属性->配置属性-> 清单工具->输入和输出->嵌入清单,选择[否]。rebuild 之,成功解决。

附上代码http://files.cnblogs.com/CodeGuy/code.zip

在Windows下开发Node.js的C/C++原生扩展的更多相关文章

  1. Windows 下安装 Node.js

    搭建博客系列的 Node.js 环境安装.Windows 下面安装可以通过图形化界面进行安装,非常方面. 1.打开 Node.js 官网,下载对应版本的安装包(msi 后缀的) 2.双击运行下载的程序 ...

  2. windows下安装node.js及环境配置、部署项目

    windows下安装node.js及环境配置.部署项目 一.总结 一句话总结: 安装nodejs软件:就像普普通通的的软件那样安装 配置nodejs安装的全局模块的环境变量 并且安装cnpm(比如cn ...

  3. [转]Windows下配置Node.js和Cordova

    本文转自:https://blog.csdn.net/weixin_37730482/article/details/74388056?locationNum=3&fps=1 本文讲解在win ...

  4. 基于windows下,node.js之npm

    1.下载node.js一路安装下去 在开始 node文件夹下,打开cmd 2.创建一个开发目录 mkdir reactQa && cd reactQa 3.初始化一个nmp的开发环境 ...

  5. windows下搭建node.js及npm的工作环境

    近期在研究数据可视化D3框架,决定在windows下搭建一个nodejs及npm的工作环境,在网上查了n篇文章,别管是编译源代码安装也好.还是使用node.msi格式安装包也好,总是有问题.终于,功夫 ...

  6. windows下安装node.js

    由于shopnc的im需要node.js 先安装下node.js 下载node.js 直接运行 安装完成后 win+R,出入cmd 安装时已经自动配置了环境变量(如果没设置环境变量,变量名:NODE_ ...

  7. windows下的node.js和npm的安装步骤详解

    一.使用之前,我们先来掌握3个东西是用来干什么的. npm: Nodejs下的包管理器. webpack: 它主要的用途是通过CommonJS的语法把所有浏览器端需要发布的静态资源做相应的准备,比如资 ...

  8. electron之Windows下使用 html js css 开发桌面应用程序

    1.atom/electron github: https://github.com/atom/electron 中文文档: https://github.com/atom/electron/tree ...

  9. mac下配置Node.js开发环境、express安装、创建项目

    mac下配置Node.js开发环境.express安装.创建项目 一.node.js的安装 去官网下载对应的平台版本就可以了,https://nodejs.org 二.express安装 sudo n ...

随机推荐

  1. Apache下的FileUtils.listFiles方法简单使用技巧

    一.引言 Apache提供的很多工具方法非常好用,推荐. 今天在使用的过程中使用到了org.apache.commons.io.FileUtils.listFiles方法,本文主要谈谈这个工具方法的用 ...

  2. 基于Verilog HDL的ADC0809CCN数据采样

    本实验是用ADC0809CCN进行数据采样,并用7段数码管进行显示. ADC0809由一个8路模拟开关.一个地址锁存与译码器.一个A/D转换器和一个三态输出锁存器组成.多路开关可选通8个模拟通道,允许 ...

  3. MySQL 批量导入 csv 文件

    注意编码一致性,如:我的数据库是utf-8编码,csv文档的编码也是utf-8. 导入使用 LOAD DATA LOCAL INFILE 详细用法请参看文档或者书籍. mysql  user表结构: ...

  4. 7 -- Spring的基本用法 -- 11...

    7.11 基于XML Schema的简化配置方式 Spring允许使用基于XML Schema的配置方式来简化Spring配置文件. 7.11.1 使用p:命名空间简化配置 p:命名空间不需要特定的S ...

  5. (中等) POJ 1703 Find them, Catch them,带权并查集。

    Description The police office in Tadu City decides to say ends to the chaos, as launch actions to ro ...

  6. iOS推送的众多坑

    新来的一家公司,昨天和同事解决推送问题(工程里有集成百度推送和环信即时通讯),信誓旦旦的声称:" app在前台和后台运行时,推送触发的是didReceiveRemoteNotificatio ...

  7. MySQL引擎简述

    MySQL数 据库引擎取决于MySQL在安装的时候是如何被编译的.要添加一个新的引擎,就必须重新编译MYSQL.在缺省情况下,MYSQL支持三个引擎:ISAM.MYISAM和HEAP.另外两种类型IN ...

  8. iOS的横屏(Landscape)与竖屏(Portrait)InterfaceOrientation

    http://www.molotang.com/articles/1530.html 接着上篇写的触摸事件,这次借机会整理下iOS横屏和竖屏的翻转方向支持,即InterfaceOrientation相 ...

  9. 【转】高性能服务器架构(High-Performance Server Architecture)

    High-Performance Server Architecture 高性能服务器架构 来源:http://pl.atyp.us/content/tech/servers.html译文来源:htt ...

  10. USACO 2015 December Contest, Platinum Problem Max Flow【树链剖分】

    题意比较难理解,就是给你n个点的树,然后给你m个修改操作,每一次修改包括一个点对(x, y),意味着将x到y所有的点权值加一,最后问你整个树上的点权最大是多少. 比较裸的树链剖分了,感谢Haild的讲 ...