這只是問題的一個例子。
假設我有 utils.cc
#include "../headers/utils/utils.h"
double sum()
{
double result = 1 1;
return result;
}
double multisum(int n)
{
double result = 0;
for (int i = 0; i < n; i )
{
result = rand();
}
return result;
}
以及使用它的這個檔案
#include "../headers/modules/sum.h"
#include "../headers/utils.h"
/* HELPERS DECLARATION */
static void ReturnResult(int result, const FunctionCallbackInfo<Value> &args);
/* EXPORTED IMPLEMENTATION */
void Sum(const FunctionCallbackInfo<Value> &args)
{
double result = sum();
ReturnResult(result, args);
}
void Multisum1e7(const FunctionCallbackInfo<Value> &args)
{
int result = multisum(1e7);
ReturnResult(result, args);
}
/* HELPERS IMPLEMENTATION */
static void ReturnResult(double result, const FunctionCallbackInfo<Value> &args)
{
Isolate *isolate = args.GetIsolate();
args.GetReturnValue().Set(Number::New(isolate, result));
}
然后將這些函式匯出為<node.h>.
問題出在rand()功能上。代碼編譯(我在代碼中包含了stdlib),這是binding.gyp:
{
"targets": [
{
"target_name": "addon",
"sources": [
"addon/main.cc",
"addon/utils.cc",
"addon/modules/sum.cc"
]
}
]
}
但是在運行時我收到了這個錯誤:
node: symbol lookup error: /xxx/build/Release/addon.node: undefined symbol: _ZL12ReturnResultiRKN2v820FunctionCallbackInfoINS_5ValueEEE
更新:
問題根本不在于,正如所選答案所回答的那樣,這是兩種型別之間的不匹配,請閱讀標記的答案以查看更多資訊。
uj5u.com熱心網友回復:
您向前宣告您的輔助函式,如下所示:
static void ReturnResult(int result, const FunctionCallbackInfo<Value> &args);
// ^^^
但然后像這樣實作它:
static void ReturnResult(double result, const FunctionCallbackInfo<Value> &args)
// ^^^^^^
因此,修復任何一個錯誤,您的問題就會消失。
您可能想了解demangler.com。那會告訴您聯結器錯誤中的損壞符號對應于:
ReturnResult(int, v8::FunctionCallbackInfo<v8::Value> const&)
我想這會很有幫助。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/411561.html
標籤:
