使用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 相关文章推荐
基于jquery的textarea发布框限制文字字数输入(添加中文识别)
Feb 16 Javascript
jQuery.each()用法分享
Jul 31 Javascript
获取客户端电脑日期时间js代码(jquery)
Sep 12 Javascript
JS利用cookie记忆当前位置的防刷新导航效果
Oct 15 Javascript
JavaScript转换与解析JSON方法实例详解
Nov 24 Javascript
jquery插件jquery.confirm弹出确认消息
Dec 22 Javascript
浅析jsopn跨域请求原理及cors(跨域资源共享)的完美解决方法
Feb 06 Javascript
js获取浏览器的各种属性
Apr 27 Javascript
用JS编写一个函数,返回数组中重复出现过的元素(实例)
Sep 14 Javascript
webpack4 升级迁移的实现
Sep 12 Javascript
JavaScript栈和队列相关操作与实现方法详解
Dec 07 Javascript
JS遍历树层级关系实现原理解析
Aug 31 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
Zerg基本策略
2020/03/14 星际争霸
php访问查询mysql数据的三种方法
2006/10/09 PHP
shopex主机报错误请求解决方案(No such file or directory)
2011/12/27 PHP
PHP实现的curl批量请求操作示例
2018/06/06 PHP
PHP实现链表的定义与反转功能示例
2018/06/09 PHP
JavaScript 获取事件对象的注意点
2009/07/29 Javascript
JavaScript 全角转半角部分
2009/10/28 Javascript
JQuery扩展插件Validate 1 基本使用方法并打包下载
2011/09/05 Javascript
javascript 控制input只允许输入的各种指定内容
2014/06/19 Javascript
修复jQuery tablesorter无法正确排序的bug(加千分位数字后)
2016/03/30 Javascript
详解Windows下安装Nodejs步骤
2017/05/18 NodeJs
angular2 组件之间通过service互相传递的实例
2018/09/30 Javascript
vue将后台数据时间戳转换成日期格式
2019/07/31 Javascript
快速对接payjq的个人微信支付接口过程解析
2019/08/15 Javascript
nuxt引入组件和公共样式的操作
2020/11/05 Javascript
微信小程序调用后台service教程详解
2020/11/06 Javascript
[45:56]Ti4正赛第一天 VG vs NEWBEE 3
2014/07/19 DOTA
浅析Python中的序列化存储的方法
2015/04/28 Python
Python读写ini文件的方法
2015/05/28 Python
Python数据类型详解(三)元祖:tuple
2016/05/08 Python
巧用python和libnmapd,提取Nmap扫描结果
2016/08/23 Python
python简易远程控制单线程版
2018/06/20 Python
使用PYTHON解析Wireshark的PCAP文件方法
2019/07/23 Python
用Python画小女孩放风筝的示例
2019/11/23 Python
python3 assert 断言的使用详解 (区别于python2)
2019/11/27 Python
Python实现图像去噪方式(中值去噪和均值去噪)
2019/12/18 Python
Python while循环使用else语句代码实例
2020/02/07 Python
python实时监控logstash日志代码
2020/04/27 Python
python中scipy.stats产生随机数实例讲解
2021/02/19 Python
一家专门经营包包的英国网站:MyBag
2019/09/08 全球购物
Eton丹麦官网:精美的男式衬衫
2020/05/27 全球购物
心理健康教育心得体会
2013/12/29 职场文书
修理厂厂长岗位职责
2014/01/30 职场文书
元旦文艺汇演主持词
2014/03/26 职场文书
分公司负责人任命书
2014/06/04 职场文书
Win11怎么把合并的任务栏分开 Win11任务栏合并分开教程
2022/04/06 数码科技