使用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 相关文章推荐
javaScript 简单验证代码(用户名,密码,邮箱)
Sep 28 Javascript
两个Javascript小tip资料
Nov 23 Javascript
Javascript实现单张图片浏览
Dec 18 Javascript
基于Jquery代码实现手风琴菜单
Nov 19 Javascript
RequireJS使用注意细节
May 15 Javascript
jQuery加载及解析XML文件的方法实例分析
Jan 22 Javascript
jQuery进阶实践之利用最优雅的方式如何写ajax请求
Dec 20 jQuery
JavaScript同源策略和跨域访问实例详解
Apr 03 Javascript
es6数组的flat(),flatMap()函数用法实例分析
Apr 18 Javascript
react实现复选框全选和反选组件效果
Aug 25 Javascript
vue实现拖拽进度条
Mar 01 Vue.js
详解Anyscript开发指南绕过typescript类型检查
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
农民C键的运用技巧
2020/03/04 星际争霸
通过对php一些服务器端特性的配置加强php的安全
2006/10/09 PHP
PHP的数组中提高元素查找与元素去重的效率的技巧解析
2016/03/03 PHP
利用PHP抓取百度阅读的方法示例
2016/12/18 PHP
解决form中action属性后面?传递参数 获取不到的问题
2017/07/21 PHP
PHP实现数组和对象的相互转换操作示例
2019/03/20 PHP
基于Jquery的仿照flash放大图片效果代码
2011/03/16 Javascript
js判断背景图片是否加载成功使用img的width实现
2013/05/29 Javascript
jquery自定义函数的多种方法
2014/01/09 Javascript
Extjs中RowExpander控件的默认展开问题示例探讨
2014/01/24 Javascript
JS简单获取客户端IP地址的方法【调用搜狐接口】
2016/09/05 Javascript
jquery判断类型是不是number类型的实例代码
2016/10/07 Javascript
Vue.js组件通信的几种姿势
2017/10/23 Javascript
jQuery实现的简单前端搜索功能示例
2017/10/28 jQuery
微信小程序实现顶部下拉菜单栏
2018/11/04 Javascript
json解析大全 双引号、键值对不在一起的情况
2019/12/06 Javascript
Vue单页面应用中实现Markdown渲染
2021/02/14 Vue.js
python 实现求解字符串集的最长公共前缀方法
2018/07/20 Python
python生成lmdb格式的文件实例
2018/11/08 Python
python opencv摄像头的简单应用
2019/06/06 Python
Django密码系统实现过程详解
2019/07/19 Python
Pandas-Cookbook 时间戳处理方式
2019/12/07 Python
20行Python代码实现视频字符化功能
2020/04/13 Python
使用keras2.0 将Merge层改为函数式
2020/05/23 Python
详解python实现可视化的MD5、sha256哈希加密小工具
2020/09/14 Python
解决HTML5中滚动到底部的事件问题
2019/08/22 HTML / CSS
美国玩具公司:U.S.Toy
2018/05/19 全球购物
大学生活学习的自我评价
2013/12/03 职场文书
大学本科生的个人自我评价
2013/12/09 职场文书
高中运动会广播稿
2014/01/21 职场文书
优秀学生获奖感言
2014/02/15 职场文书
高中军训感想800字
2014/02/23 职场文书
科长竞争上岗演讲稿
2014/05/12 职场文书
四年级学生期末评语
2014/12/26 职场文书
护士2015年终工作总结
2015/04/29 职场文书
2016先进集体事迹材料范文
2016/02/25 职场文书