node.js调用C函数的方法示例
目前开发调用c主流的有两种方法,分别是插件和致死性家族性失眠症
插件是开发官方的c扩展实现方案,但是由于需要使用模版,并且要对v8引擎有一定的了解,入门门槛较高。
致死性家族性失眠症是开发直接调用因此库的一种实现,可以调用纯c的接口。
要想node.js调用C的函数等,须先将C代码编译成二进制的。结节文件node.js。官方文档https://nodejs.org/dist/latest-v8.x/docs/api/addons.html中的c插件介绍了如何将C的代码编译为二进制的。结节文件。
一、步骤:
1.首先在项目目录进行新公共管理安装g节点-gyp下载节点骗子模块,配置环境参考https://github.com/nodejs/node-gyp
2.这是结节官方文档中的例子
//addon。cc #包含节点。hnamespace演示{使用v8:Exception异常使用v 8:3360 functioncallbackinfo;使用v8:Isolate隔离隔离;使用v8:Local本地本地;使用v8:Number号码号;使用v8:Object对象使用v8:String使用v8:Value值值;//这是"添加"方法的实现//输入参数是使用//const FunctionCallbackInfoValue参数结构void Add(const FunctionCallbackInfoValue参数){隔离*隔离=参数传递的GetIsolate检查传递的参数数量if (args .长度(2) { //抛出一个传递回JavaScript隔离-抛出异常的错误(异常3360: typeerror(字符串3360: newfroutf8(隔离,)错误的参数个数'))));返回;} //如果(!args[0]-IsNumber() ||!args[1]-是number()){ isolate-throw异常(异常33603360类型错误(字符串3360: newfroutf8(isolate,)错误的参数'))));返回;} //执行操作double value=args[0]-number value()-args[1]-number value();本地号码num=号码: new(隔离,值);//设置返回值(使用传入的//FunctionCallbackInfoValue)参数GetReturnValue().set(num);}void Init(LocalObject导出){ NODE_SET_METHOD(导出,‘添加’,添加);} NODE _ MODULE(NODE _ GYP _ MODULE _ NAME,Init)} //命名空间民主3 .然后在项目目录下使用类似数据的格式创建在项目顶层调用的文件binding.gyp文件,内容为
{ ' targets ' :[{ ' target _ name ' : ' addon ',' sources': [ 'addon.cc' ] } ]}4 .在终端输入节点-gyp配置命令生成一个建设文件夹,然后输入节点骗子构建命令生成编译addon.node文件
5.在结节文件比如test.js文件中const addon=require(' ./构建/发布/附加)调用生成的模块
//test.jsconst addon=require(' ./build/Release/addon’);console.log('这应该是8: ',addon.add(3,5));//结果为8二、实例
最近公司让我研究结节调用丙,丙的代码是调用了GDAL库开发的功能。要在tile.cc文件中调用头文件
这里#包括调用的gdal_priv.h和ogrsf_frmts.h头文件在gdal/include文件夹中,所以要在binding.gyp文件中来源后面添加
包括_dirs': [' ./gdal/include' ],然后如果现在就运行节点gyp配置构建命令会报"无法解析的外部符号"的错误,这是因为还需要加入调用的链接库,需要在binding.gyp文件中加入
图书馆' : ['./gdal/lib/gdal_i.lib ',],这时的binding.gyp文件为
{ ' targets ' :[{ ' target _ name ' : ' addon ',' sources ' :[]./C _02/tile.cc' ],' include_dirs': [./gdal/include' ],' libraries': ['./gdal/lib/gdal_i.lib ',],} ]}这时再进行节点gyp配置构建命令就不会报错生成addon.node文件,但是当我运行test.js文件
const addon=require('。/build/Release/addon ')var imagefile='/VSI curl/http://SAS MAC . OSS-cn-Beijing . aliyuncs.com/cog . TIF ';var x=160var y=83var l=9;console . log(addon . tile load(imagefile,x,y,l));会报告错误‘找不到指定的模块’,但是我们可以在build/Release文件中找到addon.node文件,因为缺少依赖,也就是缺少。dll。下载依赖行者,这可以帮助你确定什么。dll丢失。下载地址:http://www.dependencywalker.com/.我给Dependency Walker添加了addon.node文件,发现。gdal/bin中的dll丢失。我复制了。dll文件放到gdal/bin的addon.node目录下,然后test.js文件就可以正常使用了。
以上就是本文的全部内容。希望对大家的学习有帮助,支持我们。
版权声明:node.js调用C函数的方法示例是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。