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 依赖以下库,需严格匹配版本:
依赖项 | 版本 | 下载地址 |
---|---|---|
Protobuf | 3.19.4 | https://github.com/protocolbuffers/protobuf |
Zlib | 1.3.1 | https://zlib.net/ |
CBC | 2.10.7 | https://github.com/coin-or/Cbc |
SCIP | 8.0.3 | https://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"
关键验证点
- 依赖目录结构:
D:/or-tools/deps/install ├── include/ │ ├── google/protobuf/ │ └── coin/ └── lib/ ├── protobuf.lib └── CbcSolver.lib
- 路径规范:使用全英文路径,避免空格和特殊字符(如
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。关键点在于:
- 版本严格匹配:手动编译时需精确对齐 OR-Tools 9.6 的依赖版本。
- 路径规范:使用全英文路径并确保 CMake 正确识别依赖项。
- 编译验证:通过简单测试程序确保库文件正确链接。
点个赞吧!希望这篇教程能帮助你顺利在 Windows 环境下解锁 OR-Tools 的强大功能!