Error: undefined symbol: omp_init_lock only when compiling with node-gyp
Error: undefined symbol: omp_init_lock only when compiling with node-gyp
我正在尝试编译一个使用外部库的 C++ 插件。我的 bindings.gyp 文件如下所示:
{
"targets": [
{
"target_name": "addon",
"sources": [ "addon.cc" ],
"include_dirs": [
"<!(node -e \"require('nan')\")"
],
"libraries":[
"/home/ubuntu/workspace/libdds.a"
],
}
]
}
当我尝试使用 node-gyp 编译它时,它编译正常,但在运行时出现以下错误:
Error: /home/ubuntu/workspace/build/Release/addon.node: undefined symbol: omp_init_lock
at Error (native)
at Module.load (module.js:355:32)
at Function.Module._load (module.js:310:12)
at Module.require (module.js:365:17)
at require (module.js:384:17)
at Object.<anonymous> (/home/ubuntu/workspace/addon.js:1:75)
at Module._compile (module.js:460:26)
at Object.Module._extensions..js (module.js:478:10)
at Module.load (module.js:355:32)
at Function.Module._load (module.js:310:12)
omp_int_lock 不在 addon.cc 代码中,而是在我尝试使用的 libdds.a 库中。我尝试使用我的代码并将其转换为命令行程序。像这样编译它:
g++ -o ddsolver -O2 -Wall leadsolver.cpp libdds.a -lgomp
它编译并运行良好。有没有人见过这个问题?
似乎您的外部库 libdds.a 使用 OpenMP 进行并行执行,并且由于它是静态链接的,您需要提供 -lgomp 来解析所有依赖项。
我想你也可以用 -fopenmp 而不是 -lgomp 编译它
我正在尝试编译一个使用外部库的 C++ 插件。我的 bindings.gyp 文件如下所示:
{
"targets": [
{
"target_name": "addon",
"sources": [ "addon.cc" ],
"include_dirs": [
"<!(node -e \"require('nan')\")"
],
"libraries":[
"/home/ubuntu/workspace/libdds.a"
],
}
]
}
当我尝试使用 node-gyp 编译它时,它编译正常,但在运行时出现以下错误:
Error: /home/ubuntu/workspace/build/Release/addon.node: undefined symbol: omp_init_lock
at Error (native)
at Module.load (module.js:355:32)
at Function.Module._load (module.js:310:12)
at Module.require (module.js:365:17)
at require (module.js:384:17)
at Object.<anonymous> (/home/ubuntu/workspace/addon.js:1:75)
at Module._compile (module.js:460:26)
at Object.Module._extensions..js (module.js:478:10)
at Module.load (module.js:355:32)
at Function.Module._load (module.js:310:12)
omp_int_lock 不在 addon.cc 代码中,而是在我尝试使用的 libdds.a 库中。我尝试使用我的代码并将其转换为命令行程序。像这样编译它:
g++ -o ddsolver -O2 -Wall leadsolver.cpp libdds.a -lgomp
它编译并运行良好。有没有人见过这个问题?
似乎您的外部库 libdds.a 使用 OpenMP 进行并行执行,并且由于它是静态链接的,您需要提供 -lgomp 来解析所有依赖项。
我想你也可以用 -fopenmp 而不是 -lgomp 编译它