VS2022 C++使用NuGet Or-Tools遇LNK2019未解析外部符号错误求助
使用C++结合Or-Tools在VS2022中构建Debug x64项目时出现LNK2019未解析外部符号错误
我正学习用C++结合Or-Tools解决问题,在VS2022中复制Google Or-Tools官网的LinearProgrammingExample.cpp创建了项目,并且安装了Google.OrTools.runtime.win-x64 NuGet包,但构建Debug x64版本时出现多个LNK2019未解析外部符号错误,最终触发LNK1120致命错误,详细构建日志如下:
Build started... 1>------ Build started: Project: test, Configuration: Debug x64 ------ 1>simple_mip_program.cpp 1>C:\or-tools\ortools\linear_solver\linear_solver.h(305): warning C4267: 'return': conversion from 'size_t' to 'int', possible loss of data 1>C:\or-tools\ortools\linear_solver\linear_solver.h(375): warning C4267: 'return': conversion from 'size_t' to 'int', possible loss of data 1>simple_mip_program.obj : error LNK2019: unresolved external symbol "public: class absl::Duration & __cdecl absl::Duration::operator-=(class absl::Duration)" (??ZDuration@absl@@QEAAAEAV01@V01@@Z) referenced in function "class absl::Duration __cdecl absl::operator-(class absl::Duration,class absl::Duration)" (??Gabsl@@YA?AVDuration@0@V10@0@Z) 1>simple_mip_program.obj : error LNK2019: unresolved external symbol "__int64 __cdecl absl::ToInt64Milliseconds(class absl::Duration)" (?ToInt64Milliseconds@absl@@YA_JVDuration@1@@Z) referenced in function "public: __int64 __cdecl operations_research::MPSolver::wall_time(void)const " (?wall_time@MPSolver@operations_research@@QEBA_JXZ) 1>simple_mip_program.obj : error LNK2019: unresolved external symbol "class absl::Time __cdecl absl::Now(void)" (?Now@absl@@YA?AVTime@1@XZ) referenced in function "public: class absl::Duration __cdecl operations_research::MPSolver::DurationSinceConstruction(void)const " (?DurationSinceConstruction@MPSolver@operations_research@@QEBA?AVDuration@absl@@XZ) 1>simple_mip_program.obj : error LNK2019: unresolved external symbol "public: __cdecl google::LogMessage::LogMessage(char const *,int)" (??0LogMessage@google@@QEAA@PEBDH@Z) referenced in function "void __cdecl operations_research::SimpleMipProgram(void)" (?SimpleMipProgram@operations_research@@YAXXZ) 1>simple_mip_program.obj : error LNK2019: unresolved external symbol "public: __cdecl google::LogMessage::LogMessage(char const *,int,int)" (??0LogMessage@google@@QEAA@PEBDHH@Z) referenced in function "void __cdecl operations_research::SimpleMipProgram(void)" (?SimpleMipProgram@operations_research@@YAXXZ) 1>simple_mip_program.obj : error LNK2019: unresolved external symbol "public: __cdecl google::LogMessage::~LogMessage(void)" (??1LogMessage@google@@QEAA@XZ) referenced in function "void __cdecl operations_research::SimpleMipProgram(void)" (?SimpleMipProgram@operations_research@@YAXXZ) 1>simple_mip_program.obj : error LNK2019: unresolved external symbol "public: class std::basic_ostream<char,struct std::char_traits<char> > & __cdecl google::LogMessage::stream(void)" (?stream@LogMessage@google@@QEAAAEAV?$basic_ostream@DU?$char_traits@D@std@@@std@@XZ) referenced in function "void __cdecl operations_research::SimpleMipProgram(void)" (?SimpleMipProgram@operations_research@@YAXXZ) 1>simple_mip_program.obj : error LNK2019: unresolved external symbol "public: __cdecl google::LogMessageFatal::LogMessageFatal(char const *,int)" (??0LogMessageFatal@google@@QEAA@PEBDH@Z) referenced in function "void __cdecl operations_research::SimpleMipProgram(void)" (?SimpleMipProgram@operations_research@@YAXXZ) 1>simple_mip_program.obj : error LNK2019: unresolved external symbol "public: __cdecl google::LogMessageFatal::~LogMessageFatal(void)" (??1LogMessageFatal@google@@QEAA@XZ) referenced in function "void __cdecl operations_research::SimpleMipProgram(void)" (?SimpleMipProgram@operations_research@@YAXXZ) 1>simple_mip_program.obj : error LNK2019: unresolved external symbol "public: static class operations_research::MPSolver * __cdecl operations_research::MPSolver::CreateSolver(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (?CreateSolver@MPSolver@operations_research@@SAPEAV12@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) referenced in function "void __cdecl operations_research::SimpleMipProgram(void)" (?SimpleMipProgram@operations_research@@YAXXZ) 1>simple_mip_program.obj : error LNK2019: unresolved external symbol "public: class operations_research::MPVariable * __cdecl operations_research::MPSolver::MakeIntVar(double,double,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (?MakeIntVar@MPSolver@operations_research@@QEAAPEAVMPVariable@2@NNAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) referenced in function "void __cdecl operations_research::SimpleMipProgram(void)" (?SimpleMipProgram@operations_research@@YAXXZ) 1>simple_mip_program.obj : error LNK2019: unresolved external symbol "public: class operations_research::MPConstraint * __cdecl operations_research::MPSolver::MakeRowConstraint(double,double,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (?MakeRowConstraint@MPSolver@operations_research@@QEAAPEAVMPConstraint@2@NNAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) referenced in function "void __cdecl operations_research::SimpleMipProgram(void)" (?SimpleMipProgram@operations_research@@YAXXZ) 1>simple_mip_program.obj : error LNK2019: unresolved external symbol "public: enum operations_research::MPSolver::ResultStatus __cdecl operations_research::MPSolver::Solve(void)" (?Solve@MPSolver@operations_research@@QEAA?AW4ResultStatus@12@XZ) referenced in function "void __cdecl operations_research::SimpleMipProgram(void)" (?SimpleMipProgram@operations_research@@YAXXZ) 1>simple_mip_program.obj : error LNK2019: unresolved external symbol "public: __int64 __cdecl operations_research::MPSolver::iterations(void)const " (?iterations@MPSolver@operations_research@@QEBA_JXZ) referenced in function "void __cdecl operations_research::SimpleMipProgram(void)" (?SimpleMipProgram@operations_research@@YAXXZ) 1>simple_mip_program.obj : error LNK2019: unresolved external symbol "public: __int64 __cdecl operations_research::MPSolver::nodes(void)const " (?nodes@MPSolver@operations_research@@QEBA_JXZ) referenced in function "void __cdecl operations_research::SimpleMipProgram(void)" (?SimpleMipProgram@operations_research@@YAXXZ) 1>simple_mip_program.obj : error LNK2019: unresolved external symbol "public: void __cdecl operations_research::MPObjective::SetCoefficient(class operations_research::MPVariable const * const,double)" (?SetCoefficient@MPObjective@operations_research@@QEAAXQEBVMPVariable@2@N@Z) referenced in function "void __cdecl operations_research::SimpleMipProgram(void)" (?SimpleMipProgram@operations_research@@YAXXZ) 1>simple_mip_program.obj : error LNK2019: unresolved external symbol "public: void __cdecl operations_research::MPObjective::SetOptimizationDirection(bool)" (?SetOptimizationDirection@MPObjective@operations_research@@QEAAX_N@Z) referenced in function "public: void __cdecl operations_research::MPObjective::SetMaximization(void)" (?SetMaximization@MPObjective@operations_research@@QEAAXXZ) 1>simple_mip_program.obj : error LNK2019: unresolved external symbol "public: double __cdecl operations_research::MPObjective::Value(void)const " (?Value@MPObjective@operations_research@@QEBANXZ) referenced in function "void __cdecl operations_research::SimpleMipProgram(void)" (?SimpleMipProgram@operations_research@@YAXXZ) 1>simple_mip_program.obj : error LNK2019: unresolved external symbol "public: double __cdecl operations_research::MPVariable::solution_value(void)const " (?solution_value@MPVariable@operations_research@@QEBANXZ) referenced in function "void __cdecl operations_research::SimpleMipProgram(void)" (?SimpleMipProgram@operations_research@@YAXXZ) 1>simple_mip_program.obj : error LNK2019: unresolved external symbol "public: void __cdecl operations_research::MPConstraint::SetCoefficient(class operations_research::MPVariable const * const,double)" (?SetCoefficient@MPConstraint@operations_research@@QEAAXQEBVMPVariable@2@N@Z) referenced in function "void __cdecl operations_research::SimpleMipProgram(void)" (?SimpleMipProgram@operations_research@@YAXXZ) 1>C:\test\or-tools\test\x64\Debug\test.exe : fatal error LNK1120: 20 unresolved externals 1>Done building project "test.vcxproj" -- FAILED. ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ========== ========== Build started at 6:48 PM and took 09.493 seconds ==========
解决方案
- 重新安装匹配的NuGet包:卸载当前的Google.OrTools.runtime.win-x64包,重新安装时确认选择的版本支持Debug x64配置,安装过程中确保无网络中断或报错。
- 检查链接器的库文件配置:
- 右键项目 → 属性 → 配置属性 → 链接器 → 输入 → 附加依赖项,确认添加了Or-Tools的Debug版本库文件(如
ortoolsd.lib,具体名称以NuGet包内的Debug库为准)。 - 进入链接器 → 常规 → 附加库目录,添加NuGet包中Debug库的路径,通常路径为
packages\Google.OrTools.runtime.win-x64.x.x.x\runtimes\win-x64\native\debug(替换x.x.x为实际安装的版本号)。
- 右键项目 → 属性 → 配置属性 → 链接器 → 输入 → 附加依赖项,确认添加了Or-Tools的Debug版本库文件(如
- 统一运行时库设置:右键项目 → 属性 → 配置属性 → C/C++ → 代码生成 → 运行时库,Debug模式下选择
多线程调试(/MTd)或多线程调试 DLL(/MDd),需与Or-Tools编译时使用的运行时库一致。如果不确定,可两种选项分别尝试。 - 验证头文件路径:确认项目的附加包含目录正确指向Or-Tools头文件所在路径,避免因头文件版本不匹配导致符号定义不一致。
- 测试Release版本:先构建Release x64版本,如果Release能正常运行,说明问题出在Debug配置的库链接上,重点检查Debug相关的库文件和配置。
内容的提问来源于stack exchange,提问作者nyislander
相关产品推荐
相关产品推荐

