c++ - 错误: undefined symbol: omp_init_lock only when compiling with node-gyp

标签 c++ node.js 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++ - 错误: undefined symbol: omp_init_lock only when compiling with node-gyp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30583142/

相关文章:

node.js - 使用 npm 安装时找不到带有 node-gyp 重建的 python 可执行文件

c++ - 如何跟踪通话统计? C++

c++ - 在 QHash<QString, DataType> 中搜索 QStringView 而不分配内存?

c++ - 连续内存的InputIterator?

node.js - 是否可以将文件发布到 MQTT 服务器?

node.js - 关于使用Multer(1.0.6)和Express上传文件

node.js - 在 Mocha 中异步测试大量数据

c++ - const_cast<> 在 volatile 上的目的是什么?

c++ - 从 Web 工作线程调用 C++ v8 函数

node.js - NPM : Cannot find module 'node-gyp/bin/node-gyp'