html5中文学习网

您的位置: 首页 > 网站及特效实例 > javascript特效 » 正文

使用C++为node.js写扩展模块_node.js_

[ ] 已经帮助:人解决问题

前提: 安装好node.js、Python2.7与visual studio 2013。WKHHTML5中文学习网 - HTML5先行者学习网

过程:WKHHTML5中文学习网 - HTML5先行者学习网
首先安装GYP项目生成工具,npm install -g node-gyp 。WKHHTML5中文学习网 - HTML5先行者学习网
建立test目录,这是我们的工作目录,在此目录下再建一个src目录,用来存放C++源代码,另新建一个名为binding.gyp的文本文件,这是gyp的项目文件,内容如下:WKHHTML5中文学习网 - HTML5先行者学习网

复制代码 代码如下:
WKHHTML5中文学习网 - HTML5先行者学习网
{WKHHTML5中文学习网 - HTML5先行者学习网
    'targets':[{WKHHTML5中文学习网 - HTML5先行者学习网
        'target_name':'hello',WKHHTML5中文学习网 - HTML5先行者学习网
        'sources':['src/hello.cc']WKHHTML5中文学习网 - HTML5先行者学习网
    }]WKHHTML5中文学习网 - HTML5先行者学习网
}WKHHTML5中文学习网 - HTML5先行者学习网
WKHHTML5中文学习网 - HTML5先行者学习网

再写一个简单的hello.cc,内容如下:WKHHTML5中文学习网 - HTML5先行者学习网
WKHHTML5中文学习网 - HTML5先行者学习网

#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 configureWKHHTML5中文学习网 - HTML5先行者学习网
如果正确运行的话,会出现一个目录----build,其下为你生成了vs2013的项目文件,这样就可以在vs2013中进行编辑与编译了。WKHHTML5中文学习网 - HTML5先行者学习网
当然也可以直接用命令 node-gyp build进行编译。WKHHTML5中文学习网 - HTML5先行者学习网

测试js程序如下:WKHHTML5中文学习网 - HTML5先行者学习网

复制代码 代码如下:
WKHHTML5中文学习网 - HTML5先行者学习网
var hello = require('./hello');WKHHTML5中文学习网 - HTML5先行者学习网
console.log(hello.hello());WKHHTML5中文学习网 - HTML5先行者学习网
WKHHTML5中文学习网 - HTML5先行者学习网

其中遇到了一些问题,记录如下:WKHHTML5中文学习网 - HTML5先行者学习网

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拷贝到其中就好了。WKHHTML5中文学习网 - HTML5先行者学习网

2、NODE_MODULE(hello, init)中的hello是模块名,需要与文件名保持一致,不然编译没问题,运行时会出错。因为在require('./hello.node')时,既去找相应的文件,也匹配对应的MODULE。WKHHTML5中文学习网 - HTML5先行者学习网

3、我是对应着朴灵的《深入浅出node.js》这本书,并参考一些网页进行学习的,书给出的gyp项目文件中有一个conditions项,'libraries' : ['-lnode.lib'] ,因为这一句,编译时一直报错:can't open node.lib,明明文件是存在的,但就是报错,找了很多资料,也没解决,后来我把node.lib直接拷贝到工作目录下,用命令行编译成功了!但在vs2013中,错误还是依旧,我怎么想都不对,最后上官网,发现人家的例子都没有给出这种参数,我就试着把这个东东删除了,结果一切OK!大神们,谁能给出一个正确的解释?!WKHHTML5中文学习网 - HTML5先行者学习网

以上所述上就是本文的全部内容了,希望大家能够喜欢。WKHHTML5中文学习网 - HTML5先行者学习网

(责任编辑:)
推荐书籍
推荐资讯
关于HTML5先行者 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 帮助