使用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 相关文章推荐
alixixi runcode.asp的代码不错的应用
Aug 08 Javascript
jQuery powerFloat万能浮动层下拉层插件使用介绍
Dec 27 Javascript
javaScript如何生成xmlhttp
Dec 16 Javascript
js使用正则实现ReplaceAll全部替换的方法
Jul 18 Javascript
理解javascript回调函数
Dec 28 Javascript
jQuery实现简单的点赞效果
May 29 Javascript
javascript学习笔记_浅谈基础语法,类型,变量
Sep 19 Javascript
轻松理解JavaScript闭包
Mar 14 Javascript
使用webpack打包后的vue项目如何正确运行(express)
Oct 26 Javascript
微信小程序封装多张图片上传api代码实例
Dec 30 Javascript
JS实现纵向轮播图(初级版)
Jan 18 Javascript
通过实例解析jQ Ajax操作相关原理
Sep 23 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
TMDPHP 模板引擎使用教程
2012/03/13 PHP
thinkphp项目如何自定义微信分享描述内容
2017/02/20 PHP
php进程(线程)通信基础之System V共享内存简单实例分析
2019/11/09 PHP
php中try catch捕获异常实例详解
2020/08/06 PHP
JS声明变量背后的编译原理剖析
2012/12/28 Javascript
JS下拉缓冲菜单示例代码
2013/08/30 Javascript
浅谈javascript 函数内部属性
2015/01/21 Javascript
js+HTML5实现视频截图的方法
2015/06/16 Javascript
手机Web APP如何实现分享多平台功能
2016/08/19 Javascript
JS实现显示带倒影的图片横排居中放大展示特效实例【测试可用】
2016/08/23 Javascript
Node.js net模块功能及事件监听用法分析
2019/01/05 Javascript
解决Vue中 父子传值 数据丢失问题
2019/08/27 Javascript
RxJS在TypeScript中的简单使用详解
2020/04/13 Javascript
js实现简易点击切换显示或隐藏
2020/11/29 Javascript
[09:13]2014DOTA2国际邀请赛 中国区预选赛coser表演
2014/05/23 DOTA
[01:37]PWL S2开团时刻DAY1&2——这符有毒
2020/11/20 DOTA
Python的SQLAlchemy框架使用入门
2015/04/29 Python
python网络编程之文件下载实例分析
2015/05/20 Python
numpy的文件存储.npy .npz 文件详解
2018/07/09 Python
搞定这套Python爬虫面试题(面试会so easy)
2019/04/03 Python
python 实现手机自动拨打电话的方法(通话压力测试)
2019/08/08 Python
解决安装pyqt5之后无法打开spyder的问题
2019/12/13 Python
python属于解释型语言么
2020/06/15 Python
如何用Python编写一个电子考勤系统
2021/02/08 Python
DVF官方网站:美国时装界尊尚品牌
2017/08/29 全球购物
高中生活自我鉴定
2014/01/18 职场文书
程序员求职信
2014/04/16 职场文书
细节决定成败演讲稿
2014/05/12 职场文书
教师党员自我剖析材料
2014/09/29 职场文书
行政执法队伍作风整顿剖析材料
2014/10/11 职场文书
加强作风建设工作总结
2014/10/23 职场文书
小英雄雨来观后感
2015/06/09 职场文书
爱护公物主题班会
2015/08/17 职场文书
《花钟》教学反思
2016/02/17 职场文书
60条职场经典语录,总有一条能触动你的心
2019/08/21 职场文书
pytest实现多进程与多线程运行超好用的插件
2022/07/15 Python