错误:未定义符号:仅在使用node-gyp进行编译时,omp_init_lock

我正在尝试编译一个使用外部库的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来编译它