使用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 相关文章推荐
各浏览器中querySelector和querySelectorAll的实现差异分析
May 23 Javascript
js模拟select下拉菜单控件的代码
May 08 Javascript
jQuery $命名冲突解决方案汇总
Nov 13 Javascript
jQuery中extend函数详解
Feb 13 Javascript
jquery实现可旋转可拖拽的文字效果代码
Jan 27 Javascript
Node.js的环境安装配置(使用nvm方式)
Oct 11 Javascript
基于JavaScript实现简单的音频播放功能
Jan 07 Javascript
vuex 使用文档小结篇
Jan 11 Javascript
jQuery实现上下滚动公告栏详细代码
Nov 21 jQuery
OpenLayers3实现测量功能
Sep 25 Javascript
解决vue侦听器watch,调用this时出现undefined的问题
Oct 30 Javascript
keep-alive保持组件状态的方法
Dec 02 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
ThinkPHP实现ajax仿官网搜索功能实例
2014/12/02 PHP
制作特殊字的脚本
2006/06/26 Javascript
基于JQuery的动态删除Table表格的行和列的代码
2011/05/12 Javascript
Jquery上传插件 uploadify v3.1使用说明
2012/06/18 Javascript
IE6下opacity与JQuery的奇妙结合
2013/03/01 Javascript
验证手机号码的JS方法分享
2013/09/10 Javascript
JQuery $.each遍历JavaScript数组对象实例
2014/09/01 Javascript
javascript框架设计读书笔记之字符串的扩展和修复
2014/12/02 Javascript
JQuery中serialize()用法实例分析
2015/02/06 Javascript
echarts3 使用总结(绘制各种图表,地图)
2017/01/05 Javascript
使用BootStrap进行轮播图的制作
2017/01/06 Javascript
BootStrap Datetimepicker 汉化的实现代码
2017/02/10 Javascript
JS实现百度网盘任意文件强制下载功能
2018/08/31 Javascript
小程序自定义单页面、全局导航栏的实现代码
2019/03/15 Javascript
vue实现页面滚动到底部刷新
2019/08/16 Javascript
Vue清除定时器setInterval优化方案分享
2020/07/21 Javascript
布同自制Python函数帮助查询小工具
2011/03/13 Python
Python导入oracle数据的方法
2015/07/10 Python
Python实现的桶排序算法示例
2017/11/29 Python
Request的中断和ErrorHandler实例解析
2018/02/12 Python
Python 实现字符串中指定位置插入一个字符
2018/05/02 Python
基于Numpy.convolve使用Python实现滑动平均滤波的思路详解
2019/05/16 Python
Python读写文件基础知识点
2019/06/10 Python
python列表推导式操作解析
2019/11/26 Python
python自动化测试三部曲之unittest框架的实现
2020/10/07 Python
OpenCV实现机器人对物体进行移动跟随的方法实例
2020/11/09 Python
倩碧美国官网:Clinique美国
2016/07/20 全球购物
美国领先的家居装饰和礼品商店:Kirkland’s
2017/01/30 全球购物
阿联酋电子产品购物网站:Menakart
2017/09/15 全球购物
大学生的四年学习自我评价
2013/12/13 职场文书
小学学校门卫岗位职责
2014/08/03 职场文书
四风批评与自我批评范文
2014/10/14 职场文书
法学专业求职信范文
2015/03/19 职场文书
初中运动会前导词
2015/07/20 职场文书
老兵退伍感言
2015/08/03 职场文书
Elasticsearch 索引操作和增删改查
2022/04/19 Python