使用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 02 Javascript
取消选中单选框radio的三种方式示例介绍
Dec 23 Javascript
jquery图片轮播插件仿支付宝2013版全屏图片幻灯片
Apr 03 Javascript
JavaScript获取图片的原始尺寸以宽度为例
May 04 Javascript
javascript实例分享---具有立体效果的图片特效
Jun 08 Javascript
Bootstrap自定义文件上传下载样式
May 26 Javascript
浅谈jquery上下滑动的注意事项
Oct 13 Javascript
js轮播图无缝滚动效果
Jun 17 Javascript
Webpack实战加载SVG的方法
Dec 26 Javascript
Vue.js实现双向数据绑定方法(表单自动赋值、表单自动取值)
Aug 27 Javascript
轻松学习JavaScript函数中的 Rest 参数
May 30 Javascript
详解Vue的mixin策略
Nov 19 Vue.js
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 星际争霸
shopex主机报错误请求解决方案(No such file or directory)
2011/12/27 PHP
PHP字符串和十六进制如何实现互相转换
2020/07/16 PHP
Gambit vs CL BO3 第一场 2.13
2021/03/10 DOTA
超强的IE背景图片闪烁(抖动)的解决办法
2007/09/09 Javascript
解决js数据包含加号+通过ajax传到后台时出现连接错误
2013/08/01 Javascript
上传图片预览JS脚本 Input file图片预览的实现示例
2014/10/23 Javascript
详解JavaScript中的构造器Constructor模式
2016/01/14 Javascript
JS排序方法(sort,bubble,select,insert)代码汇总
2016/01/30 Javascript
node.js中module.exports与exports用法上的区别
2016/09/02 Javascript
jQuery子元素过滤选择器用法示例
2016/09/09 Javascript
对称加密与非对称加密优缺点详解
2017/02/06 Javascript
Vue.js 中取得后台原生HTML字符串 原样显示问题的解决方法
2018/06/10 Javascript
JavaScript实现异步图像上传功能
2018/07/12 Javascript
解决vue动态为数据添加新属性遇到的问题
2018/09/18 Javascript
linux 下以二进制的方式安装 nodejs
2020/02/12 NodeJs
vue中实现拖动调整左右两侧div的宽度的示例代码
2020/07/22 Javascript
[48:02]Ti4循环赛第三日 VG vs Liquid和NEWBEE vs DK
2014/07/12 DOTA
[44:04]OG vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
简单谈谈python的反射机制
2016/06/28 Python
python入门前的第一课 python怎样入门
2018/03/06 Python
pytorch实现用CNN和LSTM对文本进行分类方式
2020/01/08 Python
python爬虫调度器用法及实例代码
2020/11/30 Python
深入浅析css3 border-image边框图像详解
2015/11/24 HTML / CSS
Adobe Html5 Extension开发初体验图文教程
2017/11/14 HTML / CSS
前端H5 Video常见使用场景简介
2020/08/21 HTML / CSS
中软国际Java程序员笔试题
2014/07/19 面试题
个性发展自我评价
2014/02/11 职场文书
协议书怎么写
2014/04/21 职场文书
党的群众路线教育实践活动宣传标语口号
2014/06/06 职场文书
教师党的群众路线教育实践活动个人整改措施
2014/11/04 职场文书
班干部竞选演讲稿(精选5篇)
2019/09/24 职场文书
Memcached介绍及php-memcache扩展安装
2021/04/01 PHP
基于Python实现流星雨效果的绘制
2022/03/18 Python
2022新作动画《福星小子》释出宣传影片 加入内田真礼&宫野真守配音演出
2022/04/08 日漫
阿里云k8s服务升级时502错误 springboot项目应用
2022/04/09 Servers