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
相关产品推荐
相关产品推荐

