准备工作

(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. java多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么?

    多线程有两种实现方法,分别是继承Thread类与实现Runnable接口 同步的实现方面有两种,分别是synchronized,wait与notify 先看一下java线程运行时各个阶段的运行状态 j ...

  2. HDU 5611 Baby Ming and phone number

    #include<cstdio> #include<cstring> #include<vector> #include<cmath> #include ...

  3. ip识别运用

    tcp/ip协议中,专门保留了三个IP地址区域作为私有地址,其地址范围如下: 10.0.0.0/8:10.0.0.0-10.255.255.255 172.16.0.0/12:172.16.0.0-1 ...

  4. mysql迁移-----拷贝mysql目录/load data/mysqldump/into outfile

    摘要:本文简单介绍了mysql的三种备份,并解答了有一些实际备份中会遇到的问题.备份恢复有三种(除了用从库做备份之外), 直接拷贝文件,load data 和 mysqldump命令.少量数据使用my ...

  5. JAVA基础--事务处理

    事务处理: 1. 取消掉自动提交 set autocommmit=0 2. 开始事务  bigin 3. 进行一系列操作 update 4. 如果操作全部合格, 提交事务  commit 5. 如果发 ...

  6. layer 的一些知识

    layer类似于ps的图层,如果把一个uiview看做图片的画,layer就像是图层.一个图片是由很多个大小不同的有层次的图层构成的,uiview也是. 1. 一个view有一个underlying ...

  7. html背景图片拉伸至全屏

    本来想在body的css中设置,但发现怎么弄也无法搞定,技术水平有限吧,最后通过下面方式来达到效果: <img src = 'url' border = '0' width = '100%' h ...

  8. 在JSP里使用CKEditor和CKFinder

    在JSP里使用CKEditor和CKFinder 最 近在做一个新闻发布平台,放弃了很早的FCKEditor,使用CKEditor和CKFinder,尽管免费的CKFinder是Demo版本,但是功 ...

  9. BZOJ 2705 [SDOI2012]Longge的问题 ——Dirichlet积

    [题目分析] 狄利克雷卷积. 然后直接求出欧拉函数,计算和即可. [代码] #include <cstdio> #include <cstring> #include < ...

  10. 【转】PHP生成随机密码的几种方法

    使用PHP开发应用程序,尤其是网站程序,常常需要生成随机密码,如用户注册生成随机密码,用户重置密码也需要生成一个随机的密码.随机密码也就是一串固定长度的字符串,这里我收集整理了几种生成随机字符串的方法 ...