【Windows通过VCPKG配置Ceres环境】

简介

Ceres是Google推出一款非线性最小二乘优化库。在Windows下配置Ceres环境主要有两种方法:一种是自行下载代码编译,由于Ceres依赖库较多,配置起来较为麻烦;另一种是通过微软的包管理软件VCPKG配置Ceres环境,比较简单,适合新手小白。本文分享Windows系统下通过VCPKG配置Ceres环境的步骤,内容主要参考了以下三篇博客。

vcpkg 安装ceres库总崩溃的解决办法
在windows系统中使用Ceres非线性优化库:(一)安装Ceres库
win11+vs2022配置ceres库

VCPKG下载生成Ceres库

  1. 首先,下载安装vcpkg,可以参考官网的教程Get started with vcpkg。这里把vcpkg放置在了D:\Program Files\vcpkg路径下。
  2. 安装vcpkg后,在vcpkg路径下运行命令行.\vcpkg search ceres,如下图所示,会找到ceres及开启一些优化选项所依赖的库。vcpkg search ceres使用.\vcpkg install ceres[cuda,cxsparse,eigensparse,lapack,suitesparse,tools]:x64-windows --recurse命令安装Ceres(方括号中的库名根据需要填写),会自动下载Ceres依赖库。生成完成后,在D:\Program Files\vcpkg\installed\x64-windows路径可以看到bin、include、lib、share文件。

VS项目中配置Ceres环境

本节介绍两种在VS项目中配置Ceres环境的方法。一种是使用vcpkg,另一种是使用cmake。使用vcpkg会出现报错,需要手动更改VS项目配置解决,会写cmakelists的话使用cmake更加方便。

使用VCPKG

  1. 运行.\vcpkg integrate install命令可以自动在VS中所有项目集成Ceres环境,无需再进行项目配置。若要删除集成,可以使用 .\vcpkg integrate remove
  2. 在VS中新建空项目,下载Ceres源码,在example中拷贝一个例程,比如helloworld.cc,添加到项目中,点击运行。
  3. 过程可能出现报错,我运行中出现三种错误,按照第三个博客中的方法解决了。注意在Debug和Release模式下都要进行配置。
    a. 首先是GLOG_NO_ABBREVIATED_SEVERITIES报错。解决方法是在项目->属性->C/C+±>预处理器中的预处理器定义增GLOG_NO_ABBREVIATED_SEVERITIES 。
    GLOG_NO_ABBREVIATED_SEVERITIES报错 b. 其次是jet.h和local_parameterization.h报错,解决方法是将项目->属性->C/C+±>常规中的SDL检查改为否。jet.h和local_parameterization.h报错 c. 最后是std::max报错,解决方法是将项目->属性->C/C+±>预处理器中的预处理器定义增加NOMINMAX。std::max报错
  4. 最后运行程序,成功输出。
    helloworld.cc输出

使用CMAKE

  1. 下载Ceres源码,在example中拷贝一个例程,比如helloworld.cc,放入某一新建文件夹如cereshelloworld
  2. cereshelloworld文件夹新建cmakelists.txt文件,按照cmake基本写法配置ceres环境。唯一不同的是,需要在cmake工具链中中添加vcpkg.cmake路径,增加如下语句:set(CMAKE_TOOLCHAIN_FILE "D:/Program Files/vcpkg/scripts/buildsystems/vcpkg.cmake")
cmake_minimum_required(VERSION 3.2)
# 使用VCPKG生成的库(修改成自己电脑中的vcpkg路径)
set(CMAKE_TOOLCHAIN_FILE "D:/Program Files/vcpkg/scripts/buildsystems/vcpkg.cmake")
# 项目名
project(ceres_helloworld)
# 添加可执行文件
add_executable(${PROJECT_NAME} helloworld.cc)
# 查找并包含、链接Ceres
find_package(Ceres CONFIG REQUIRED)
include_directories(${CERES_INCLUDE_DIRS})
link_directories(${CERES_LIBRARY_DIRS})
target_link_libraries(${PROJECT_NAME} PRIVATE ${CERES_LIBRARIES})
  1. 打开cmake-gui,设置代码路径为cereshelloworld,设置build路径为cereshelloworld\build,依次点击配置、生成、打开工程。
    在这里插入图片描述
  2. 在打开的VS工程中右键点击ceres_helloworld工程,设置为启动项目,点击开始执行,可成功运行程序。
    在这里插入图片描述