CentOS环境通过C++ Addon实现Node.js调用C++方法

CentOS环境通过C++ Addon实现Node.js调用C++方法

  • 1. C++ Addon
  • 2. 基础配置
    • 2.1 搭建node.js环境并配置npm
      • 2.1.1 wget
      • 2.1.2 nodejs&npm
    • 2.2 安装Python
    • 2.3 安装node-gyp
    • 2.4 安装GCC
  • 3. Calculate demo

1. C++ Addon

更多信息:https://nodejs.org/api/addons.html#addons_addon_examples
简单来说,C++ Addon即为C++插件,作为一种动态连接库,可以在nodejs环境中通过require()加载C++插件,并与之通信。
由文档可以看出,C++ Addon可以实现C++和JavaScript之间的参数传递、函数调用以及回调、异常处理以及对象函数传递等功能。本文暂时只作最简单的调用demo。

2. 基础配置

2.1 搭建node.js环境并配置npm

2.1.1 wget

输入wget -V,检查wget是否已安装。
如果未安装,yum install -y wget

2.1.2 nodejs&npm

  1. 在https://nodejs.org/dist/latest-v12.x/ 找到目标下载源, 然后执行:
    wget https://nodejs.org/dist/latest-v12.x/node-v12.14.1-linux-x64.tar.gz
  2. 解压安装
    tar -zvxf node-v12.14.1-linux-x64.tar.gz
    【注】如果要解压到指定目录,可以用tar -zvxf node-v12.14.1-linux-x64.tar.gz -C 目标路径
  3. 建立软连接,实现全局使用
    ln -s /root/node-v12.14.1-linux-x64/bin/node /usr/local/bin/node
    ln -s /root/node-v12.14.1-linux-x64/bin/npm /usr/local/bin/npm
  4. 检查版本
    node -v
    npm -v

2.2 安装Python

一般centos默认安装python,如果没有安装,则先自行安装。

2.3 安装node-gyp

参考:https://www.npmjs.com/package/node-gyp
简介:node-gyp 是一个跨平台命令行工具,用于编译native addon模块并使之应用于node项目。

  1. 安装node-gyp
    npm install -g node-gyp
  2. 建立软连接用于全局
    ln -s /root/node-v12.14.1-linux-x64/bin/node-gyp /usr/local/bin/node-gyp
  3. 检查是否全局可用
    node-gyp -v

2.4 安装GCC

GCC安装分为离线安装和在线安装,为了方便,在这使用在线安装方式。

  1. gcc -v 检查是否已安装GCC
  2. 如果没有安装,输入sudo yum -y install gcc gcc-c++ kernel-devel
    【注】如果想卸载原来的版本,可以先执行yum remove gcc
  3. 输入make -v检查make是否安装,如果没有安装,yum install make
  4. 检查gcc版本, gcc -v
    【注】查看gcc位置: which gcc

3. Calculate demo

参考: https://nodejs.org/api/addons.html#addons_addon_examples

  1. mkdir addonDemo //创建demo目录
    npm init //初始化项目
    CentOS环境通过C++ Addon实现Node.js调用C++方法_第1张图片
  2. 创建binding.gyp文件
vi binding.gyp

拷贝以下代码

{
  "targets": [
    {
      "target_name": "calculate",
      "sources": [
        "calculate.cc"
      ]
    }
  ]
}
  1. 创建calculate.cc文件
vi calculate.cc

并copy以下代码

// calculate.cc
#include 

namespace calculate
{
	using v8::FunctionCallbackInfo;
	using v8::Isolate;
	using v8::Local;
	using v8::Number;
	using v8::Object;
	using v8::Value;
	
	void Method(const FunctionCallbackInfo<Value> &args)
	{
	  Isolate *isolate = args.GetIsolate();
	  int i;
	  double x = 100.32462344, y = 200.333456533452;
	  for (i = 0; i < 1000000000; i++)
	  {
	    x += y;
	  }
	  auto total = Number::New(isolate, x);
	  args.GetReturnValue().Set(total);
	}
	
	void Initialize(Local<Object> exports)
	{
	  NODE_SET_METHOD(exports, "calc", Method);
	}
	
	NODE_MODULE(NODE_GYP_MODULE_NAME, Initialize);
} // namespace calculate
  1. 配置node-gyp,
node-gyp configure
  1. Build addon
node-gyp build
  1. 创建main.js,输入:
const calculate = require('./build/Release/calculate.node');

console.log(calculate.calc())

  1. 结果
node main.js

控制台打印:

200333457692.3986

你可能感兴趣的:(技术类,#,javascript)