当我需要从Node.js的鳍片上获取电子的本机Addon C ++时出错
最近,我为节点开发了我的第一个本机C ++插件,该插件可与我的节点项目(节点版本10.15.0)配合使用 该插件是使用XCode构建的,该项目是使用CMake生成的。
当我从Electron应用程序中使用相同的本机C ++插件时,出现以下错误。
dyld:懒惰的符号绑定失败:找不到符号:__ZN2v816 FunctionTemplate 3 New EPNS_7IsolateEPFvRKNS_20FunctionCallbackInfoINS_5ValueEEEENS_5LocalIS4_EENSA_INS_9SignatureEEEiNS_19ConstructorBehaviorfect_14 引用自:/Users/vicentvidal/Documents/Desarrollo/DASNet2/dasaudio/build/DASNetAddon.node 预期于:平面名称空间 dyld:未找到符号:__ZN2v816FunctionTemplate3NewEPNS_7IsolateEPFvRKNS_20FunctionCallbackInfoINS_5ValueEEEENS_5LocalIS4_EENSA_INS_9SignatureEEEiNS_19ConstructorBehaviorENS_14SideEffectTypeE 引用自:/Users/vicentvidal/Documents/Desarrollo/DASNet2/dasaudio/build/DASNetAddon.node 预期用于:平面名称空间
正如我所见,问题仅在我从电子应用程序拨打电话时出现
const addon = require('bindings')('DASNetAddon');
调用以下C ++代码
static NAN_MODULE_INIT(Init) {
v8::Local<v8::FunctionTemplate> tpl = Nan::New<v8::FunctionTemplate>(New);
tpl->SetClassName(Nan::New("StreamingWorker").ToLocalChecked());
tpl->InstanceTemplate()->SetInternalFieldCount(2);
SetPrototypeMethod(tpl, "sendToAddon", sendToAddon);
constructor().Reset(Nan::GetFunction(tpl).ToLocalChecked());
Nan::Set(target, Nan::New("StreamingWorker").ToLocalChecked(),
Nan::GetFunction(tpl).ToLocalChecked());
}
我的电子版本为3.0.10 我的楠2.12.1版本 我的绑定版本1.3.1
有人有什么建议吗?
答案 0 :(得分:0)
我不是很肯定这是问题所在,但可能是因为函数模板缺少您的C ++类名,所以命名空间来自其他地方。这是我的Nan Init()函数之一。 // Prepare constructor template
之后的行使New
参数具有类名称空间。
void Metadata::Init(v8::Local<v8::Object> exports) {
Nan::HandleScope scope;
// Prepare constructor template
v8::Local<v8::FunctionTemplate> ctor = Nan::New<v8::FunctionTemplate>(Metadata::New);
constructor.Reset(ctor);
ctor->InstanceTemplate()->SetInternalFieldCount(2);
ctor->SetClassName(Nan::New("Metadata").ToLocalChecked());
// Prototype
Nan::SetPrototypeMethod(ctor, "copy", Metadata::copy);
Nan::Set(exports, Nan::New("Metadata").ToLocalChecked(), ctor->GetFunction());
}
我没有尝试在Electron环境中或在Mac上运行/加载,所以我只能说这在Linux上可以正常工作。但是因为您的错误消息涉及“ FunctionTemplate3New”,所以这是一个猜测。