使用C++为node.js写扩展模块


Posted in Javascript onApril 22, 2015

前提: 安装好node.js、Python2.7与visual studio 2013。

过程:
首先安装GYP项目生成工具,npm install -g node-gyp 。
建立test目录,这是我们的工作目录,在此目录下再建一个src目录,用来存放C++源代码,另新建一个名为binding.gyp的文本文件,这是gyp的项目文件,内容如下:

{

    'targets':[{

        'target_name':'hello',

        'sources':['src/hello.cc']

    }]

}

再写一个简单的hello.cc,内容如下:

#include <node.h>
using namespace v8;

Handle<Value> Hello(const Arguments& args) {
 HandleScope scope;
 return scope.Close(String::New("Hello world!"));
}

void init(Handle<Object> target) {
 NODE_SET_METHOD(target, "hello", Hello);
}

NODE_MODULE(hello, init)

然后运行命令: node-gyp configure
如果正确运行的话,会出现一个目录----build,其下为你生成了vs2013的项目文件,这样就可以在vs2013中进行编辑与编译了。
当然也可以直接用命令 node-gyp build进行编译。

测试js程序如下:

var hello = require('./hello');

console.log(hello.hello());

其中遇到了一些问题,记录如下:

1、C:\Users\Administrator.node-gyp\0.10.33这个目录下,没有默认Debug目录,在vs2013中编译成debug文件时会提示 error LNK1104: cannot open file 'C:\Users\Administrator.node-gyp\0.10.33\Debug\node.lib' ,建立一个Debug目录,把与你操作系统环境相同的目录下的node.lib拷贝到其中就好了。

2、NODE_MODULE(hello, init)中的hello是模块名,需要与文件名保持一致,不然编译没问题,运行时会出错。因为在require('./hello.node')时,既去找相应的文件,也匹配对应的MODULE。

3、我是对应着朴灵的《深入浅出node.js》这本书,并参考一些网页进行学习的,书给出的gyp项目文件中有一个conditions项,'libraries' : ['-lnode.lib'] ,因为这一句,编译时一直报错:can't open node.lib,明明文件是存在的,但就是报错,找了很多资料,也没解决,后来我把node.lib直接拷贝到工作目录下,用命令行编译成功了!但在vs2013中,错误还是依旧,我怎么想都不对,最后上官网,发现人家的例子都没有给出这种参数,我就试着把这个东东删除了,结果一切OK!大神们,谁能给出一个正确的解释?!

以上所述上就是本文的全部内容了,希望大家能够喜欢。

Javascript 相关文章推荐
分享别人写的一个小型js框架
Aug 13 Javascript
JavaScript CSS菜单功能 改进版
Dec 20 Javascript
js window.event对象详尽解析
Feb 17 Javascript
封装的jquery翻页滚动(示例代码)
Nov 18 Javascript
js获取当前月的第一天和最后一天的小例子
Nov 18 Javascript
js确认删除对话框适用于a标签及submit
Jul 10 Javascript
jquery把int类型转换成字符串类型的方法
Oct 07 Javascript
深入理解bootstrap框架之入门准备
Oct 09 Javascript
js实现产品缩略图效果
Mar 10 Javascript
基于Bootstrap框架实现图片切换
Mar 10 Javascript
vue.js从安装到搭建过程详解
Mar 17 Javascript
Node.js 实现抢票小工具 &amp; 短信通知提醒功能
Oct 22 Javascript
node.js 使用ejs模板引擎时后缀换成.html
Apr 22 #Javascript
JavaScript模拟深蓝vs卡斯帕罗夫的国际象棋对局示例
Apr 22 #Javascript
jscript读写二进制文件的方法
Apr 22 #Javascript
javascript格式化json显示实例分析
Apr 21 #Javascript
JavaScript汉诺塔问题解决方法
Apr 21 #Javascript
JavaScript让网页出现渐隐渐显背景颜色的方法
Apr 21 #Javascript
JavaScript实现动画打开半透明提示层的方法
Apr 21 #Javascript
You might like
PHP中auto_prepend_file与auto_append_file用法实例分析
2014/09/22 PHP
PHP编程计算两个时间段是否有交集的实现方法(不算边界重叠)
2017/05/30 PHP
yii2 在控制器中验证请求参数的使用方法
2019/06/19 PHP
在JavaScript中通过URL传递汉字的方法
2007/04/09 Javascript
JQuery SELECT单选模拟jQuery.select.js
2009/11/12 Javascript
页面只能打开一次Cooike如何实现
2012/12/04 Javascript
js写的方法实现上传图片之后查看大图
2014/03/05 Javascript
javascript解析xml实现省市县三级联动的方法
2015/07/25 Javascript
jquery插件EasyUI中form表单提交实例分享
2016/01/11 Javascript
JS实现禁止鼠标右键的功能
2016/10/15 Javascript
详解javascript事件绑定使用方法
2016/10/20 Javascript
微信小程序之小豆瓣图书实例
2016/11/30 Javascript
jQuery实现页面滚动时智能浮动定位
2017/01/08 Javascript
Vue数据驱动模拟实现1
2017/01/11 Javascript
JS正则表达式验证密码格式的集中情况总结
2017/02/23 Javascript
JavaScript使用链式方法封装jQuery中CSS()方法示例
2017/04/07 jQuery
vue实现样式之间的切换及vue动态样式的实现方法
2017/12/19 Javascript
JavaScript动态加载重复绑定问题
2018/04/01 Javascript
vue router 配置路由的方法
2018/07/26 Javascript
Node.js控制台彩色输出的方法与原理实例详解
2019/12/01 Javascript
react项目从新建到部署的实现示例
2021/02/19 Javascript
[15:46]教你分分钟做大人——沙王
2015/03/11 DOTA
[03:12]完美世界DOTA2联赛PWL DAY7集锦
2020/11/06 DOTA
pandas读取csv文件,分隔符参数sep的实例
2018/12/12 Python
原生python实现knn分类算法
2019/10/24 Python
Django实现从数据库中获取到的数据转换为dict
2020/03/27 Python
如何基于python实现不邻接植花
2020/05/01 Python
Python使用socketServer包搭建简易服务器过程详解
2020/06/12 Python
Python包和模块的分发详细介绍
2020/06/19 Python
详解pandas中利用DataFrame对象的.loc[]、.iloc[]方法抽取数据
2020/12/13 Python
巴西图书和电子产品购物网站:Saraiva
2017/06/07 全球购物
高二生物教学反思
2014/01/27 职场文书
考试诚信承诺书
2014/05/23 职场文书
三好学生先进事迹材料
2014/08/28 职场文书
结婚喜宴迎宾词
2015/08/10 职场文书
JavaScript实现贪吃蛇游戏
2021/06/16 Javascript