我正在创建一个 C++ 插件,我想使用一个静态库。我有一个 .a 库 libarith,它可以做简单的加法。

-libarith.a
-hello.cc
-hello.js

我的 binding.gyp 文件如下:-
{ "targets": [
        {
        "target_name": "addon",
        "sources": [ "hello.cc" ],
        "libraries": [ "-/home/folder/api/addon/libarith.a" ],
        "cflags!": [ "-fno-exceptions" ],
        "cflags": [ "-std=c++11" ],
        "cflags_cc!": [ "-fno-exceptions" ]
        }
        ]
    }

当我编译我的 hello.cc 时,它编译得很好。但是当我运行我的插件时,它给出了以下错误:

Node :符号查找错误:/home/folder/api/addon/build/Release/addon.node: undefined symbol: _ZN4demo3sumEii.
我是插件的新手,非常感谢您的帮助。

代码片段:-
libarith.a 包含:
int sum(int a ,int b){

    return a+b;
}

//你好.cc
#include <node.h>
#include <vector>
#include <iostream>
#include <v8.h>
using namespace std;
using namespace v8;
namespace demo {

using v8::FunctionCallbackInfo;
using v8::Isolate;
using v8::Local;
using v8::Object;
using v8::String;
using v8::Value;
void newmethod(const FunctionCallbackInfo<Value>& args)
{ extern int sum(int,int);

Isolate* isolate = args.GetIsolate();
double abc= sum(4,5);
Local<Number> newnumber =Number::New(isolate,abc);
v8::String::Utf8Value r(args[1]);
    std::string rst(*r);
Local<String> first = String::NewFromUtf8(isolate, "firstargument");
Local<String> second = String::NewFromUtf8(isolate, "secondargument");
Local<Object> newobj= Object::New(isolate);
newobj->Set(first,String::NewFromUtf8(isolate, *s));
newobj->Set(second,newnumber);
args.GetReturnValue().Set(newobj);

}
void init(Local<Object> exports) {
  NODE_SET_METHOD(exports, "newmethod", newmethod);
}
NODE_MODULE(addon, init)
}

//你好.js
const addon = require('./build/Release/addon');

var ss = "helloo";
var samplestring = "It is not a sample string";
console.log(addon.newmethod(samplestring, ss));

编辑:-解决方案如下。我试图为库创建一个单独的目录,它工作正常。

最佳答案

它说,它找不到声明(.h 的实现)。我认为你给你的图书馆错误的方向。有两种解决方案:

  • binding.gyp ~/whereItIsLocated 将完整目录写入您的库,在我的情况下是 ~/CLionProjects/node-player-core/PlayerCore/lib/x64/yourLibraryName.a
  • 如果以前的解决方案没有帮助,您可以将您的库复制到 /usr/lib 。你可以用 sudo cp ~/whereLibraryLocated /usr/lib 做到这一点。
  • 关于c++ - Node : symbol lookup error: , undefined symbol :_ZN4demo3sumEii,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46054694/

    10-16 20:50