使用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操作数据库的实例代码
Oct 17 Javascript
js鼠标滑过图片震动特效的方法
Feb 17 Javascript
jQuery实现拖动效果的实例代码
Jun 25 jQuery
Angular 开发学习之Angular CLI的安装使用
Dec 31 Javascript
在Vue组件中使用 TypeScript的方法
Feb 28 Javascript
微信小程序实现点赞、取消点赞功能
Nov 02 Javascript
微信小程序 腾讯地图显示偏差问题解决
Jul 27 Javascript
js实现打字小游戏
Dec 17 Javascript
vue中实现回车键登录功能
Feb 19 Javascript
Vue computed 计算属性代码实例
Apr 22 Javascript
微信小程序自定义tabBar的踩坑实践记录
Nov 06 Javascript
vue 在服务器端直接修改请求的接口地址
Dec 19 Vue.js
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生成自己的LOG文件
2006/10/09 PHP
php5中类的学习
2008/03/28 PHP
PHP-FPM 设置多pool及配置文件重写操作示例
2019/10/02 PHP
javascript 写类方式之八
2009/07/05 Javascript
JQuery 学习笔记 选择器之五
2009/07/23 Javascript
JavaScript 继承详解 第一篇
2009/08/30 Javascript
优化javascript的执行速度
2010/01/23 Javascript
动态加载外部javascript文件的函数代码分享
2011/07/28 Javascript
Js日期选择自动填充到输入框(界面漂亮兼容火狐)
2013/08/02 Javascript
js的2种继承方式详解
2014/03/04 Javascript
关于JavaScript对象的动态选择及遍历对象
2014/03/10 Javascript
javascript实现textarea中tab键的缩排处理方法
2015/06/26 Javascript
举例讲解JavaScript中将数组元素转换为字符串的方法
2015/10/25 Javascript
JavaScript动态创建div等元素实例讲解
2016/01/06 Javascript
CascadeView级联组件实现思路详解(分离思想和单链表)
2016/04/12 Javascript
AngularJS 获取ng-repeat动态生成的ng-model值实例详解
2016/11/29 Javascript
JS实现鼠标移上去显示图片或微信二维码
2016/12/14 Javascript
js实现图片加载淡入淡出效果
2017/04/07 Javascript
Vue.js常用指令的使用小结
2017/06/23 Javascript
JS实现的视频弹幕效果示例
2018/08/17 Javascript
Vue.js 十五分钟入门图文教程
2018/09/12 Javascript
vue实现codemirror代码编辑器中的SQL代码格式化功能
2019/08/27 Javascript
JS中自定义事件的使用与触发操作实例分析
2019/11/01 Javascript
python日志记录模块实例及改进
2017/02/12 Python
学习Python3 Dlib19.7进行人脸面部识别
2018/01/24 Python
Python生成rsa密钥对操作示例
2019/04/26 Python
Python使用import导入本地脚本及导入模块的技巧总结
2019/08/07 Python
Pytorch to(device)用法
2020/01/08 Python
详解python 支持向量机(SVM)算法
2020/09/18 Python
SEPHORA新西兰官方网站:购买化妆品和护肤品
2016/12/02 全球购物
电信专业毕业生推荐信
2013/11/18 职场文书
安全承诺书范文
2014/03/26 职场文书
幼儿园大班毕业教师寄语
2014/04/03 职场文书
基层党员群众路线教育实践活动个人对照检查材料思想汇报
2014/10/05 职场文书
劳资员岗位职责
2015/02/13 职场文书
在职证明书模板
2015/06/15 职场文书