You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google OR-Tools Node.js Addon符号查找错误求助:未定义符号问题

解决Node.js Addon链接Google OR-Tools的符号未定义错误

问题原因

编译成功但运行时出现undefined symbol错误,说明你的Addon没有正确链接Google OR-Tools的库文件,导致运行时找不到MPSolver::CreateSolver的实现。

解决方案

1. 修改bindings.gyp配置,添加库链接参数

你的bindings.gyp仅配置了头文件路径,缺少链接OR-Tools库的关键配置。修改后的完整配置如下:

{
  'targets': [{
    'target_name': 'addon',
    'sources': [
      'src/addon.cc'
    ],
    'cflags_cc': [
      '-std=c++17'
    ],
    'include_dirs': [
      '<!(node -p "require(\'node-addon-api\').include")',
      '/root/opt_02/dependencies/ortools/include'
    ],
    # 指定OR-Tools库文件所在路径
    'library_dirs': [
      '/root/opt_02/dependencies/ortools/lib'  # 若库已移至/usr/lib,可替换为'/usr/lib'
    ],
    # 声明要链接的OR-Tools库
    'libraries': [
      '-lortools'
    ],
    # 可选:若运行时仍找不到动态库,添加运行时库路径
    'runtime_library_dirs': [
      '/root/opt_02/dependencies/ortools/lib'
    ]
  }]
}

2. 重新编译Addon

清理旧的编译产物,重新执行编译流程:

node-gyp clean configure build

3. 验证OR-Tools库的完整性

如果仍报错,检查OR-Tools库是否包含目标符号:

nm -D /usr/lib/libortools.so | grep _ZN19operations_research8MPSolver12CreateSolver

若输出为空,说明你的OR-Tools库未包含线性求解器模块,需要重新编译OR-Tools并启用相关组件。

4. 确保C++ ABI一致性

错误中的std::__cxx11::basic_string提示需要C++11 ABI一致性:

  • 确认编译OR-Tools时添加了-D_GLIBCXX_USE_CXX11_ABI=1参数
  • 保证你的Addon编译参数(-std=c++17)与OR-Tools的编译参数匹配

5. 更新系统库缓存(可选)

如果将OR-Tools库移到/usr/lib后未更新缓存,执行:

ldconfig

内容的提问来源于stack exchange,提问作者Kris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 20:50:33