使用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实现页面5秒后自动跳转的方法
Apr 16 Javascript
jQuery实现响应鼠标事件的图片透明效果【附demo源码下载】
Jun 16 Javascript
针对后台列表table拖拽比较实用的jquery拖动排序
Oct 10 Javascript
js插件Jcrop自定义截取图片功能
Oct 14 Javascript
jquery.multiselect多选下拉框实现代码
Nov 11 Javascript
用 js 的 selection range 操作选择区域内容和图片
Apr 18 Javascript
前端开发不得不知的10个最佳ES6特性
Aug 30 Javascript
Vue.js中关于侦听器(watch)的高级用法示例
May 02 Javascript
JavaScript 点击触发复制功能实例详解
Nov 02 Javascript
JS实现求字符串中出现最多次数的字符和次数示例
Jul 05 Javascript
vue实现两个区域滚动条同步滚动
Dec 13 Vue.js
详解Javascript实践中的命令模式
May 05 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&amp;&amp;mysql)五
2006/10/09 PHP
Bo-Blog专用的给Windows服务器的IIS Rewrite程序
2007/08/26 PHP
PHP中MVC模式的模板引擎开发经验分享
2011/03/23 PHP
利用php获取服务器时间的实现代码
2013/06/07 PHP
用js实现上传图片前的预览(TX的面试题)
2007/08/14 Javascript
屏蔽Flash右键信息的js代码
2010/01/17 Javascript
Jquery知识点二 jquery下对数组的操作
2011/01/15 Javascript
Jquery上传插件 uploadify v3.1使用说明
2012/06/18 Javascript
jquery删除指定的html标签并保留标签内文本内容的方法
2014/04/02 Javascript
js实现横向百叶窗效果网页切换动画效果的方法
2015/03/02 Javascript
javascript实现的右下角弹窗实例
2015/04/24 Javascript
Bootstrap基础学习
2015/06/16 Javascript
JavaScript中对DOM节点的访问、创建、修改、删除
2015/11/16 Javascript
js验证真实姓名与身份证号,手机号的简单实例
2016/07/18 Javascript
JavaScript的继承实现小结
2017/05/07 Javascript
Vue的MVVM实现方法
2017/08/16 Javascript
vue 国际化 vue-i18n 双语言 语言包
2018/06/07 Javascript
npm配置国内镜像资源+淘宝镜像的方法
2018/09/07 Javascript
jqGrid表格底部汇总、合计行footerrow处理
2019/08/21 Javascript
Nuxt的路由配置和参数传递方式
2020/11/06 Javascript
python logging类库使用例子
2014/11/22 Python
python uuid模块使用实例
2015/04/08 Python
详解Python读取配置文件模块ConfigParser
2017/05/11 Python
python 全局变量的import机制介绍
2017/09/07 Python
10 行Python 代码实现 AI 目标检测技术【推荐】
2019/06/14 Python
pytorch sampler对数据进行采样的实现
2019/12/31 Python
Python3.6安装卸载、执行命令、执行py文件的方法详解
2020/02/20 Python
使用卷积神经网络(CNN)做人脸识别的示例代码
2020/03/27 Python
keras打印loss对权重的导数方式
2020/06/10 Python
Python 列表中的修改、添加和删除元素的实现
2020/06/11 Python
python计算auc的方法
2020/09/09 Python
为中国消费者甄选天下优品:网易严选
2016/08/11 全球购物
企业管理标语
2014/06/10 职场文书
机关班子查摆问题及整改措施
2014/10/28 职场文书
2016七一建党节慰问信
2015/11/30 职场文书
nginx之内存池的实现
2022/06/28 Servers