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

Error: undefined symbol: omp_init_lock only when compiling with node-gyp

本文关键字:编译 node-gyp lock 符号 未定义 omp init 错误      更新时间:2023-10-16

我正在尝试编译一个使用外部库的c++插件。我的绑定。p文件看起来像这样:

{
  "targets": [
    {
      "target_name": "addon",
      "sources": [ "addon.cc" ],
      "include_dirs": [
        "<!(node -e "require('nan')")"
      ],
      "libraries":[
        "/home/ubuntu/workspace/libdds.a" 
      ],         
    }
  ]
}

当我尝试用node- yp编译它时,它编译得很好,但在运行时我得到以下错误:

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不在插件中。Cc代码,而不是在libdds。我正在使用的图书馆。我试着把我的代码转换成命令行程序。像这样编译:

g++ -o ddsolver -O2 -Wall leadsolver.cpp libdds.a -lgomp

编译和运行良好。有人见过这个问题吗?

看起来像你的外部库libdds。a使用OpenMP进行并行执行,因为它是静态链接的,所以你需要提供-lgomp来解决所有的依赖关系。

我认为你也可以用-fopenmp来编译它,而不是-lgomp