如何使用node-gyp提供静态C库函数?

问题描述 投票:0回答:1

我尝试通过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;
c++ node.js node-gyp node-addon-api
1个回答
0
投票

在 InitAll 函数中,您必须导出要从 js 调用的所有 C 函数

exports.Set(Napi::String::New(env, "myfunc"), Napi::Function::New(env, myfunc));

如果它们是在 main.cpp 中或静态库中的其他地方定义的,则并不重要。

© www.soinside.com 2019 - 2024. All rights reserved.