使用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 相关文章推荐
需要做特殊处理的DOM元素属性的访问
Nov 05 Javascript
使用jQuery的将桌面应用程序引入浏览器
Nov 19 Javascript
禁止选中文字兼容IE、Chrome、FF等
Sep 04 Javascript
js获取通过ajax返回的map型的JSONArray的方法
Jan 09 Javascript
js单词形式的运算符
May 06 Javascript
jquery.mobile 共同布局遇到的问题小结
Feb 10 Javascript
浅谈toLowerCase和toLocaleLowerCase的区别
Aug 15 Javascript
jquery validate表单验证插件
Sep 06 Javascript
JSON是什么?有哪些优点?JSON和XML的区别?
Apr 29 Javascript
js对象数组和对象的使用实例详解
Aug 27 Javascript
flexible.js实现移动端rem适配方案
Apr 07 Javascript
前端监听websocket消息并实时弹出(实例代码)
Nov 27 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 header示例代码(推荐)
2010/09/08 PHP
PHP中操作ini配置文件的方法
2013/04/25 PHP
PHP跳转页面的几种实现方法详解
2013/06/08 PHP
php中ob函数缓冲机制深入理解
2015/08/03 PHP
Yii操作数据库实现动态获取表名的方法
2016/03/29 PHP
JS提交并解析后台返回的XML的代码
2008/11/03 Javascript
js Date自定义函数 延迟脚本执行
2010/03/10 Javascript
js 兼容多浏览器的回车和鼠标焦点事件代码(IE6/7/8,firefox,chrome)
2010/04/14 Javascript
js实现checkbox全选和反选示例
2014/05/01 Javascript
js创建对象的区别示例介绍
2014/07/24 Javascript
jQuery插件slicebox实现3D动画图片轮播切换特效
2015/04/12 Javascript
ajax+jQuery实现级联显示地址的方法
2015/05/06 Javascript
jQuery中extend()和fn.extend()方法详解
2015/06/03 Javascript
js控制元素显示在屏幕固定位置及监听屏幕高度变化的方法
2015/08/11 Javascript
利用jQuery来动态为属性添加或者删除属性的简单方法
2016/12/02 Javascript
js的OOP继承实现(必看篇)
2017/02/18 Javascript
微信小程序template模板实例详解
2017/10/27 Javascript
layui 点击重置按钮, select 并没有被重置的解决方法
2019/09/03 Javascript
[01:03:47]VP vs NewBee Supermajor 胜者组 BO3 第一场 6.5
2018/06/06 DOTA
对于Python装饰器使用的一些建议
2015/06/03 Python
Python编程之列表操作实例详解【创建、使用、更新、删除】
2017/07/22 Python
Python3.5面向对象程序设计之类的继承和多态详解
2019/04/24 Python
python itchat实现调用微信接口的第三方模块方法
2019/06/11 Python
Python Unittest原理及基本使用方法
2020/11/06 Python
基础的CSS3弹性盒Flexbox布局使用实例
2016/04/08 HTML / CSS
美国精油公司:Plant Therapy
2019/05/17 全球购物
Tessabit日本:集世界奢侈品和设计师品牌的意大利精品买手店
2020/01/07 全球购物
Ruby如何实现动态方法调用
2012/11/18 面试题
办加油卡单位介绍信
2014/01/09 职场文书
机关工会开展学习雷锋活动总结
2014/03/01 职场文书
中层干部培训方案
2014/06/16 职场文书
机械工程师岗位职责
2014/06/16 职场文书
学校查摆问题整改措施
2014/09/28 职场文书
个人委托函范文
2015/01/29 职场文书
化验员岗位职责
2015/02/14 职场文书
退休劳动合同怎么写?
2019/10/25 职场文书