使用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实现分割提取页面所需内容
May 09 Javascript
SyntaxHighlighter语法高亮插件使用说明
Aug 14 Javascript
jquery $(this).attr $(this).val方法使用介绍
Oct 08 Javascript
jQuery Form 页面表单提交的小例子
Nov 15 Javascript
jQuery jcrop插件截图使用方法
Nov 20 Javascript
Javascript添加监听与删除监听用法详解
Dec 19 Javascript
第七章之菜单按钮图标组件
Apr 25 Javascript
使用plupload自定义参数实现多文件上传
Jul 19 Javascript
vue-router之nuxt动态路由设置的两种方法小结
Sep 26 Javascript
Node.js 使用axios读写influxDB的方法示例
Oct 26 Javascript
Jquery的Ajax技术使用方法
Jan 21 jQuery
vue打包通过image-webpack-loader插件对图片压缩优化操作
Nov 12 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
增加反向链接的101个方法 站长推荐
2007/01/31 PHP
php中DOMDocument简单用法示例代码(XML创建、添加、删除、修改)
2010/12/19 PHP
php网站判断用户是否是手机访问的方法
2013/11/01 PHP
php设置静态内容缓存时间的方法
2014/12/01 PHP
PHP 验证登陆类分享
2015/03/13 PHP
PHP培训要多少钱
2017/06/06 PHP
JavaScript toFixed() 方法
2010/04/15 Javascript
基于jQuery的试卷自动排版系统实现代码
2011/01/06 Javascript
检测input每次的输入是否合法遇到汉字输入就有问题
2012/05/23 Javascript
使用js实现雪花飘落效果
2013/08/26 Javascript
javascript获取flash版本号的方法
2014/11/20 Javascript
jQuery实现360°全景拖动展示
2015/03/18 Javascript
详解JavaScript中的异常处理方法
2015/06/16 Javascript
原生js实现无缝轮播图效果
2017/01/11 Javascript
jQuery.Ajax()的data参数类型详解
2017/07/23 jQuery
vue2组件之select2调用的示例代码
2017/10/12 Javascript
vue-router实现tab标签页(单页面)详解
2017/10/17 Javascript
node前端开发模板引擎Jade的入门
2018/05/11 Javascript
vue自定义底部导航栏Tabbar的实现代码
2018/09/03 Javascript
create-react-app安装出错问题解决方法
2018/09/04 Javascript
Vue项目安装插件并保存
2019/01/28 Javascript
js 将多个对象合并成一个对象 assign方法的实现
2020/09/24 Javascript
python和shell实现的校验IP地址合法性脚本分享
2014/10/23 Python
Python中import机制详解
2017/11/14 Python
Python及PyCharm下载与安装教程
2017/11/18 Python
Django 使用logging打印日志的实例
2018/04/28 Python
numpy中的delete删除数组整行和整列的实例
2018/05/09 Python
python构建基础的爬虫教学
2018/12/23 Python
解决python测试opencv时imread导致的错误问题
2019/01/26 Python
Python异步操作MySQL示例【使用aiomysql】
2019/05/16 Python
Python Json数据文件操作原理解析
2020/05/09 Python
HTML5 Notification(桌面提醒)功能使用实例
2014/03/17 HTML / CSS
荷兰本土平价百货:HEMA
2017/10/23 全球购物
银行门卫岗位职责
2013/12/29 职场文书
解析MySQL binlog
2021/06/11 MySQL
 Redis 串行生成顺序编码的方法实现
2022/04/03 Redis