​手把手教程:在 VS2017 32位 Windows 环境下编译 OR-Tools 9.6 并集成到 C++ 项目

        OR-Tools 是 Google 开源的优化算法库,支持路径规划、线性规划、约束编程等多种功能。本文将详细介绍在 ​Visual Studio 2017 32位 Windows 环境下编译 OR-Tools 9.6 的两种方法:联网自动下载依赖手动编译依赖项,并提供避坑指南。


方法一:联网自动下载依赖(推荐新手)​

步骤 1:克隆 OR-Tools 仓库
git clone https://github.com/google/or-tools.git
cd or-tools
git checkout v9.6  # 切换到 9.6 版本
步骤 2:配置 CMake 并启用自动下载
mkdir build
cd build
cmake .. -G "Visual Studio 15 2017" -A Win32 ^
  -DBUILD_DEPS=ON ^      # 自动下载依赖项
  -DAUTOBUILD=ON ^       # 自动编译依赖项
  -DCMAKE_INSTALL_PREFIX=../install
步骤 3:编译并安装
cmake --build . --config Release --target install
关键说明
  • 依赖项自动下载:CMake 会通过 Git 下载所需依赖项(如 Protobuf、CBC、SCIP 等),并自动编译安装到 dependencies/install
  • 网络问题处理:若下载失败,可配置代理或重试:
    set http_proxy=http://127.0.0.1:1080
    set https_proxy=http://127.0.0.1:1080

方法二:手动编译依赖项(适合定制化需求)​

步骤 1:手动下载依赖项

OR-Tools 9.6 依赖以下库,需严格匹配版本:

依赖项版本下载地址
Protobuf3.19.4https://github.com/protocolbuffers/protobuf
Zlib1.3.1https://zlib.net/
CBC2.10.7https://github.com/coin-or/Cbc
SCIP8.0.3https://www.scipopt.org/
步骤 2:编译依赖项并安装到 install 目录

以 ​Protobuf​ 为例:

# 1. 解压源码并进入目录
cd protobuf-3.19.4
mkdir build
cd build

# 2. 配置 CMake(32位编译)
cmake .. -G "Visual Studio 15 2017" -A Win32 ^
  -DCMAKE_INSTALL_PREFIX=../../install ^
  -Dprotobuf_BUILD_TESTS=OFF

# 3. 编译安装
cmake --build . --config Release --target install
步骤 3:配置 OR-Tools 的 CMake
cmake .. -G "Visual Studio 15 2017" -A Win32 ^
  -DBUILD_DEPS=OFF ^             # 关闭自动下载
  -DCMAKE_PREFIX_PATH="D:/or-tools/deps/install" ^  # 指定依赖路径
  -DProtobuf_DIR="D:/or-tools/deps/install/lib/cmake/protobuf" ^
  -DZLIB_ROOT="D:/or-tools/deps/install" ^
  -DCBC_DIR="D:/or-tools/deps/install/lib/cmake/Cbc"
关键验证点
  1. 依赖目录结构
    
    
    D:/or-tools/deps/install
    ├── include/
    │   ├── google/protobuf/
    │   └── coin/
    └── lib/
        ├── protobuf.lib
        └── CbcSolver.lib
  2. 路径规范:使用全英文路径,避免空格和特殊字符(如 D:/优化库 会导致 CMake 解析失败)。

方法对比

方法优点缺点
自动下载简单快捷,无需手动操作依赖网络,版本固定
手动编译可定制依赖版本,离线使用步骤繁琐,需严格匹配版本

常见问题解决

1. 编译时出现 LNK2001: unresolved external symbol
  • 原因:依赖项未正确链接。
  • 解决:检查 CMAKE_PREFIX_PATH 是否包含所有依赖的 install 路径。
2. SCIP 依赖 Bliss 库失败
  • 步骤:手动编译 Bliss 并指定路径:
    cmake .. -DBLISS_DIR="D:/deps/bliss-0.77/install/lib/cmake/bliss"
3. 自动下载时 Git 克隆超时
  • 解决:手动下载依赖项源码,放置到 or-tools/cmake/deps 对应目录中。

集成到 C++ 项目示例

CMakeLists.txt 配置
cmake_minimum_required(VERSION 3.20)
project(MyORProject)

# 指定 OR-Tools 安装路径
set(ORTOOLS_ROOT "D:/or-tools/install")

find_package(ortools REQUIRED)
add_executable(my_app main.cpp)
target_link_libraries(my_app ortools::ortools)

 

验证代码
#include "ortools/linear_solver/linear_solver.h"

int main() {
  operations_research::MPSolver solver("test", 
      operations_research::MPSolver::CBC_MIXED_INTEGER_PROGRAMMING);
  return 0;
}

 

总结

通过本文的两种方法,你可以根据需求选择快速集成或深度定制 OR-Tools。关键点在于:

  1. 版本严格匹配:手动编译时需精确对齐 OR-Tools 9.6 的依赖版本。
  2. 路径规范:使用全英文路径并确保 CMake 正确识别依赖项。
  3. 编译验证:通过简单测试程序确保库文件正确链接。

点个赞吧!希望这篇教程能帮助你顺利在 Windows 环境下解锁 OR-Tools 的强大功能!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值