Windows下CMake编译Ceres Solver库及依赖
前言
提示:
Ceres solver (官网:http://ceres-solver.org/)是一个开源 C++ 库,用于建模和解决大型、复杂的优化问题。它可用于解决具有边界约束和一般无约束优化问题的非线性最小二乘问题。是一个成熟、功能丰富且性能卓越的库。
GitHub:https://github.com/ceres-solver/ceres-solver
本篇主要进行windows系统下的Ceres solver库的安装和使用方法介绍,主要包括Ceres、Eigen、Golg、gflags等库的编译安装。
注:考虑的需要的库文件比较多,直接把所有依赖项编译成静态链接库[.lib]文件,不使用动态链接库的形式(需要同时使用 [ .dll] 和 [.lib] 文件)
文章目录
环境
先介绍一下软件及环境
- windows 10
- Visual Studio 2019
- CMake GUI 3.21.3
一、源码下载
由于Ceres基于 glog 和 gflags 以及Eigen进行解算以及其他一些作用,因此在进行Ceres编译前还需要编译好需要用到的一些库文件。
下载网址如下:
Eigen 3.3.7:https://gitlab.com/libeigen/eigen/-/releases/3.3.7
GFAGS 2.2.2 : https://github.com/gflags/gflags/releases/tag/v2.2.2
GLOG v0.6.0 :https://github.com/google/glog/releases/tag/v0.6.0
Ceres Solver 1.14.0:https://github.com/ceres-solver/ceres-solver/tree/1.14.0
因为一些库不同版本可能区别,如果使用最新版本或其他版本可能会有bug或冲突,不一定能编译成功
二、依赖库的编译
这里不在展示CMake与Visual Studio2019的安装过程,正常安装,能用就行,没有特殊要求。
1.Eigen编译与安装
代码如下(示例):
Eigen库是一个优秀的开源C++矩阵运算库,他本身是不需要安装的,正常使用只需要在工程中包含他的路径,文件中包含需要的头文件即可使用,这里为了方便其他库的编译,将其与其他库统一安装位置。这里编译选项中也选项即可。
打开CMake GUI,选择源码路径和工程文件存储目录,点击左下角的configure按钮进行配置,中间会弹出VS版本和位数的选择,这里选择Visual studio 16 2019 X64即可,
- 点击
finish
自动开始配置,第一次自动配置完一般会出现一些红色选项,在此进行部分选项的配置 - 点击
configure
进行配置 - 点击
Generate
生成VS工程文件 - 点击
open Project
打开VS工程
CMake 配置项:
取消选中 BUILD_TESTING (加快编译速度)
CMAKE_INSTALL_PREFIX = E:/3.External_Lib/MT/LibInstall/ceres_rely/eigen
分别以Debug
模式和Release
模式点击ALL_BUILD进行生成,然后右键INSTALL生成项目,将生成的lib文件安装到指定的位置
注:可选择生成中的批生成,但需要注意,有的库的debug和release名称相同,会出现覆盖
2.GFLAGS编译与安装
CMake 配置项:
取消选中 BUILD_TESTING (加快编译速度)
取消选中 BUILD_SHARD_LIBS (编译静态链接库,不选中)
CMAKE_INSTALL_PREFIX (指定lib文件安装目录)
点击 右上角 Add Entry
添加 MSVC_USE_STATIC_CRT
BOOL选项,以MT、MTd模式生成VS工程。
配置如图:
生成工程文件后,发现MSVC_USE_STATIC_CRT
并不能让工程直接生成成MT/MTd,因此需要在打开工程后在项目gflags_static
和 gflags_nothread_static
属性中手动修改
分别以Debug和Release模式生成并安装项目
完成两个静态链接库的安装
3.GLOG编译与安装
CMake 配置项:
取消选中 BUILD_TESTING (加快编译速度)
取消选中 BUILD_SHARD_LIBS (编译静态链接库,不选中)
安装目录 CMAKE_INSTALL_PREFIX (指定lib文件安装目录)
gflag_DIR 会自动识别,无法识别则手动选择前面安装之后的目录
添加BOOL选项 MSVC_USE_STATIC_CRT (MT、MTd模式)
注:MSVC_USE_STATIC_CRT 命令依旧不起作用,可能与CMakeList.txt有关,这里手动修改其中的glogbase项目中的运行时库即可
至此,几个依赖库编译安装完毕
4.suitesparse编译安装
这个并不是必须安装的依赖库。但是如果装上将会提高Ceres对稀疏矩阵的计算性能,提供更多可用的优化算法。这个库的原生版本本身对Windows的支持不好,所以在Windows上要使用这个专门针对Windows的衍生版本suitesparse-metis-for-windows
。另外,这个库还存在一个名为CXSparse的简化版本.
配置选项:
取消选中 BUILD_METIS ,否则在编译METIS库是会发生很多莫名其妙的错误。
取消选中 HAVE_COMPLEX ,否则也会有很多莫名其妙的错误。
取消选中 SHARED 。如果选中会报错缺少一系列.lib文件(生成dll文件需要用到lib文件,一般需要先生成lib文件在勾选SHARD重新生成工程文件,后生成dll文件)。
OPENMP根据需要设置 (选中)
SUITESPARES_INSTALL_PREFIX = E:/3.External_Lib/MT/LibInstall/ceres_rely/suitesparse-merits-for-windows
LAPACK_DIR = E:/3.External_Lib/MT/LibSourceFile/suitesparse-metis-for-windows-1.5.0/lapack_windows/x64
选中 MSVC_USE_STATIC_CRT (MT模式运行库)
注:MSVC_USE_STATIC_CRT 不能让CMake生成MT模式的vs工程,需要手动修改,项目比较多
不过,这个库也可以不安装,编译ceres是不选中,使用默认的简化库 CXSparse
也可以完成编译。
三、Ceres编译与使用
同样的操作,在CMake GUI选中ceres的源码和Build目录,选择X64进行配置
配置项如下:
##依赖勾选
LAPACK (选中), ceres直接使用LAPACK,选中Lapack选项后才会出现BLAS_LIBRARIES 与LAPACK_LIBRARIES选项
CUSTOM_BLAS (选中)
SUITESPARSE (选中),加速稀疏矩阵的运算
EIGENSPARSE (选中),使用eigen作为稀疏线性代数库
gflags(选中)
##其他编译选项
BUILD_EXAMPLES (取消勾选),节省后续编译时间。
BUILD_TESTING (取消勾选),节省后续编译时间。
BUILD_SHARED_LIBS (取消选中) 生成静态链接库不要选中。
CMAKE_BUILD_TYPE (Release)
##依赖文件路径
Eigen3_DIR = E:/3.External_Lib/MT/LibInstall/ceres_rely/eigen/Release/share/eigen3/
gflags_DIR = E:/3.External_Lib/MT/LibInstall/ceres_rely/gflags/Release/lib/cmake/gflags
glog_DIR = E:/3.External_Lib/MT/LibInstall/ceres_rely/glog/Release/lib/cmake/glog
SUITESPARSE_CHECK_INCLUDE_DIRS = E:\3.External_Lib\MT\LibInstall\ceres_rely\suitesparse-merits-for-windows\include\suitesparse
SUITESPARSE_CHECK_LIBRARY_DIRS = E:/3.External_Lib/MT/LibInstall/ceres_rely/suitesparse-merits-for-windows/lib
BLAS_LIBRARIES = E:/3.External_Lib/MT/LibSourceFile/suitesparse-metis-for-windows-1.5.0/lapack_windows/x64libblas.lib
LAPACK_LIBRARIES=E:/3.External_Lib/MT/LibSourceFile/suitesparse-metis-for-windows-1.5.0/lapack_windows/x64/liblapack.lib
CMAKE_INSTALL_PREFIX = E:/3.External_Lib/MT/LibInstall/ceres
因为suitesparse的一些路径没有配置,编译ceres是没有用到suitesparse库,而是用CXSparse代替了
不是很影响。
剩下就是用MT模式编译生成Debug和Release的库了
四、参考链接
[1] Windows Ceres 编译安装
[2] Windows 下编译 Ceres