使用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 相关文章推荐
超级退弹代码
Jul 07 Javascript
jQuery hover 延时器实现代码
Mar 12 Javascript
jquery实现网站超链接和图片提示效果
Mar 21 Javascript
jquery操作checked属性以及disabled属性的多种方法
Jun 20 Javascript
实现前后端数据交互方法汇总
Apr 07 Javascript
jQuery中trigger()与bind()用法分析
Dec 18 Javascript
JavaScript类型系统之Object详解
Jan 07 Javascript
微信小程序入门教程
Nov 18 Javascript
react-native android状态栏的实现
Jun 15 Javascript
如何使用puppet替换文件中的string
Dec 06 Javascript
微信小程序(订阅消息)功能
Oct 25 Javascript
浅析JavaScript预编译和暗示全局变量
Sep 03 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
Win2003服务器安全加固设置--进一步提高服务器安全性
2007/05/23 PHP
PHP开启gzip页面压缩实例代码
2010/03/11 PHP
PHP操作数组相关函数
2011/02/03 PHP
php文件上传的简单实例
2013/10/19 PHP
php实现mysql数据库分表分段备份
2015/06/18 PHP
PHP实现文件上传后台处理脚本
2020/03/04 PHP
2020最新版 PhpStudy V8.1版本下载安装使用详解
2020/10/30 PHP
PHP7新增函数
2021/03/09 PHP
新浪中用来显示flash的函数
2007/04/02 Javascript
createElement动态创建HTML对象脚本代码
2008/11/24 Javascript
checkbox全选/取消全选以及checkbox遍历jQuery实现代码
2009/12/02 Javascript
$.each与$().each的区别示例介绍
2014/03/20 Javascript
BOOTSTRAP时间控件显示在模态框下面的bug修复
2015/02/05 Javascript
jquery中attr和prop的区别分析
2015/03/16 Javascript
jquery+php实现滚动的数字特效
2015/11/29 Javascript
JavaScript制作简单的日历效果
2016/03/10 Javascript
JS实现消息来时让网页标题闪动效果的方法
2016/04/20 Javascript
javascript中对Date类型的常用操作小结
2016/05/19 Javascript
JavaScript遍历Json串浏览器输出的结果不统一问题
2016/11/03 Javascript
easyui tree带checkbox实现单选的简单实例
2016/11/07 Javascript
Webpack实现按需打包Lodash的几种方法详解
2017/05/08 Javascript
基于vue1和vue2获取dom元素的方法
2018/03/17 Javascript
JavaScript callback回调函数用法实例分析
2018/05/08 Javascript
JS数组Object.keys()方法的使用示例
2019/06/05 Javascript
JQuery表单元素取值赋值方法总结
2020/05/12 jQuery
[00:56]2014DOTA2国际邀请赛 DK、iG 赛前探访
2014/07/10 DOTA
Python动刷新抢12306火车票的代码(附源码)
2018/01/24 Python
对Python 除法负数取商的取整方式详解
2018/12/12 Python
在Python中表示一个对象的方法
2019/06/25 Python
Python3 中作为一等对象的函数解析
2019/12/11 Python
Pytorch.nn.conv2d 过程验证方式(单,多通道卷积过程)
2020/01/03 Python
CSS3实现大小不一的粒子旋转加载动画
2016/04/21 HTML / CSS
牵手50新加坡:专为黄金岁月的单身人士而设的交友网站
2020/08/16 全球购物
家教广告词
2014/03/19 职场文书
授权委托书
2015/01/28 职场文书
生日宴会家属答谢词
2015/09/29 职场文书