node-addon-api
是一个用于构建 Node.js 插件的 C++ API 包装器。它允许开发者使用 C++ 编写高性能的 Node.js 扩展,并通过 N-API
(Node.js API)与 JavaScript 环境进行交互。共享库(Shared Library)是一种可以被多个程序同时使用的库文件,通常以 .so
(在 Unix-like 系统上)或 .dll
(在 Windows 上)为扩展名。
以下是一个简单的示例,展示如何使用 node-addon-api
创建一个 Node.js 插件,并链接到一个共享库。
假设我们有一个简单的 C++ 文件 mylib.cpp
:
// mylib.cpp
extern "C" {
int add(int a, int b) {
return a + b;
}
}
编译成共享库:
g++ -shared -o libmylib.so mylib.cpp
创建一个 binding.gyp
文件来描述构建配置:
{
"targets": [
{
"target_name": "addon",
"sources": [ "addon.cc" ],
"libraries": [ "-L./ -lmylib" ]
}
]
}
编写 addon.cc
文件:
// addon.cc
#include <napi.h>
#include "mylib.h"
Napi::Number Add(const Napi::CallbackInfo& info) {
Napi::Env env = info.Env();
int a = info[0].As<Napi::Number>().Int32Value();
int b = info[1].As<Napi::Number>().Int32Value();
return Napi::Number::New(env, add(a, b));
}
Napi::Object Init(Napi::Env env, Napi::Object exports) {
exports.Set("add", Napi::Function::New(env, Add));
return exports;
}
NODE_API_MODULE(addon, Init)
使用 node-gyp
构建插件:
node-gyp configure build
在 JavaScript 中使用构建好的插件:
const addon = require('./build/Release/addon');
console.log(addon.add(3, 4)); // 输出: 7
原因:可能是库文件路径不正确,或者运行时环境无法找到库文件。
解决方法:
LD_LIBRARY_PATH
环境变量,指向库文件所在的目录。export LD_LIBRARY_PATH=./:$LD_LIBRARY_PATH
通过以上步骤,你应该能够成功使用 node-addon-api
链接并使用共享库。
领取专属 10元无门槛券
手把手带您无忧上云