我尝试通过node-gyp和node-addon-api编译node_module。编译没有错误,但我无法公开静态库中的函数。 (和最终节点文件比静态库abc.a小一样)
绑定.gyp
{
"targets": [
{
"target_name": "test",
"cflags!": [ "-fno-exceptions" ],
"cflags_cc!": [ "-fno-exceptions" ],
"sources": [
"/data/abc.h",
"main.cpp"
],
'include_dirs': [
"<!@(node -p \"require('node-addon-api').include\")"
],
'libraries': [
"/data/abc.a"
],
'dependencies': [
"<!(node -p \"require('node-addon-api').gyp\")"
],
'defines': [ 'NAPI_DISABLE_CPP_EXCEPTIONS' ]
}
]
}
main.cpp
/* main.cpp */
#include <napi.h>
#include "abc.h"
Napi::Object InitAll(Napi::Env env, Napi::Object exports) {
return exports;
}
NODE_API_MODULE(testaddon, InitAll)
main.js(用于暴露对象)
const testAddon = require('./build/Release/apostlib');
console.log(testAddon);
module.exports = testAddon;
在 InitAll 函数中,您必须导出要从 js 调用的所有 C 函数
exports.Set(Napi::String::New(env, "myfunc"), Napi::Function::New(env, myfunc));
如果它们是在 main.cpp 中或静态库中的其他地方定义的,则并不重要。