这只是问题的一个例子。
假设我有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
如果我不使用它就会消失rand()
;