使用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 相关文章推荐
对 lightbox JS 图片控件进行了一下改造, 使其他支持复杂的图片说明
Mar 20 Javascript
jQuery 打造动态下滑菜单实现说明
Apr 15 Javascript
代码获取历史上的今天发生的事
Apr 11 Javascript
JavaScript Promise启示录
Aug 12 Javascript
avalonjs制作响应式瀑布流特效
May 06 Javascript
JS判断图片是否加载完成方法汇总(最新版)
May 13 Javascript
JavaScript实现经典排序算法之选择排序
Dec 28 Javascript
实例详解JavaScript中setTimeout函数的执行顺序
Jul 12 Javascript
js实现随机点名系统(实例讲解)
Oct 18 Javascript
详解如何在微信小程序开发中正确的使用vant ui组件
Sep 13 Javascript
解决angular 使用原生拖拽页面卡顿及表单控件输入延迟问题
Apr 21 Javascript
Vue的props父传子的示例代码
May 20 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获取某个目录大小的代码
2008/09/10 PHP
php 移除数组重复元素的一点说明
2008/11/27 PHP
php将图片保存为不同尺寸图片的图片类实例
2015/03/30 PHP
php 二维数组快速排序算法的实现代码
2017/10/17 PHP
php 可变函数使用小结
2018/06/12 PHP
PHP7引入的&quot;??&quot;和&quot;?:&quot;的区别讲解
2019/04/08 PHP
php 使用 __call实现重载功能示例
2019/11/18 PHP
iis6+javascript Add an Extension File
2007/06/13 Javascript
ASP.NET jQuery 实例14 在ASP.NET form中校验时间范围
2012/02/03 Javascript
js判断客户端是iOS还是Android等移动终端的方法
2013/12/11 Javascript
jQuery写fadeTo示例代码
2014/02/21 Javascript
jQuery.uploadify文件上传组件实例讲解
2016/09/23 Javascript
AngularJS中directive指令使用之事件绑定与指令交互用法示例
2016/11/22 Javascript
js实现的简练高效拖拽功能示例
2016/12/21 Javascript
JavaScript trim 实现去除字符串首尾指定字符的简单方法
2016/12/27 Javascript
js实现把图片的绝对路径转为base64字符串、blob对象再上传
2016/12/29 Javascript
详解在vue-cli中引用jQuery、bootstrap以及使用sass、less编写css
2017/11/08 jQuery
深入理解vuex2.0 之 modules
2017/11/20 Javascript
微信小程序倒计时功能实例代码
2018/07/17 Javascript
Vue+element 解决浏览器自动填充记住的账号密码问题
2019/06/11 Javascript
解决vue组件没显示,没起作用,没报错,但该显示的组件没显示问题
2020/09/02 Javascript
[46:58]完美世界DOTA2联赛PWL S3 Forest vs LBZS 第一场 12.17
2020/12/19 DOTA
一个基于flask的web应用诞生 组织结构调整(7)
2017/04/11 Python
python实现淘宝秒杀聚划算抢购自动提醒源码
2020/06/23 Python
python 对类的成员函数开启线程的方法
2019/01/22 Python
python3实现带多张图片、附件的邮件发送
2019/08/10 Python
Python中的上下文管理器相关知识详解
2019/09/19 Python
html5 横向滑动导航栏的方法示例
2020/05/08 HTML / CSS
什么是命名空间(NameSpace)
2015/11/24 面试题
办公自动化专业大学生职业规划书
2014/03/06 职场文书
公立医院改革实施方案
2014/03/14 职场文书
主题班会演讲稿
2014/05/22 职场文书
争先创优心得体会
2014/09/12 职场文书
幼儿园小班工作总结2015
2015/04/25 职场文书
解析laravel使用workerman用户交互、服务器交互
2021/04/28 PHP
js中Object.create实例用法详解
2021/10/05 Javascript