在NodeJS中,我正在构建C语言中共享对象的接口。我有以下代码:
#include <node.h>
#include "libcustom_encryption.h"
namespace demo {
using v8::Exception;
using v8::FunctionCallbackInfo;
using v8::Isolate;
using v8::Local;
using v8::Number;
using v8::Object;
using v8::String;
using v8::Value;
//
// This is the implementation of the "add" method
// Input arguments are passed using the
// const FunctionCallbackInfo<Value>& args struct
//
void DeviceGetVersion(const FunctionCallbackInfo<Value>& args)
{
char ver[10] = {0};
unsigned int ver_size = 0;
device_get_version(ver, ver_size);
Isolate* isolate = args.GetIsolate();
//
// 1. Save the value in to a isolate thing
//
Local<Value> str = String::NewFromUtf8(isolate, "Test");
//
// 2. Set the return value (using the passed in
// FunctionCallbackInfo<Value>&)
//
args.GetReturnValue().Set(str);
}
void Init(Local<Object> exports)
{
NODE_SET_METHOD(exports, "devicegetversion", DeviceGetVersion);
}
NODE_MODULE(addon, Init)
}
node-gyp configure
:正常工作node-gyp build
:正常工作LD_LIBRARY_PATH=libs/ node index.js
:无效我收到以下错误:
node: symbol lookup error: /long_path/build/Release/app.node: undefined symbol: _Z18device_get_versionPcS_Phj
调用函数时,它会被添加前缀并附加随机字符。我假设这是随机数据是来自内存的一些噪音。它接缝好像大小刹车调用功能更大然后它应该。
我不喜欢混合C ++和C,我很想得到关于正在发生的事情的解释。
技术规格:
答案 0 :(得分:2)
调用该函数,它被预先添加并附加随机字符
它被称为 在C ++中发生的name mangling。
这里的实际错误是编译模块无法链接到函数device_get_version()
。
您可能的行动:
device_get_version
的实施添加到您的模块 UPD。
device_get_version
实际上可能是一个C函数,它被视为一个C ++函数(你可以通过它具有的错误名称来告诉它)。
确保您的函数声明为
extern "C" {
void device_get_version(...);
}