Windows Ceres 编译安装

Ceres Solver是一个C++环境下的非线性最小二乘问题的求解工具包,可用来建模并解决大型复杂的非线性最小二乘问题。这个工具包已经广泛被用于很多商业软件中。在google project里面有它的主页: http://code.google.com/p/ceres-solver/。

环境

  • Windows 10 Pro
  • Visual Studio 2015
  • Cmake GUI 3.10.2

安装前的准备

  • Ceres-solver 1.14.0

  • Eigen 3.3.7

  • gflags 2.2.2

  • glog 0.4

    • 下载地址:https://github.com/google/glog
    • Google Glog是Google的一个开源库,用于实现应用级别的logging。 它提供了一系列类似于C++流风格的logging API,以及一些预定义的宏。它有点类似于C里面的assert,但是比它具备更丰富的输出信息以及使用灵活性。
  • suitesparse-metis-for-windows Release 1.3.1

    • 下载地址:https://github.com/jlblancoc/suitesparse-metis-for-windows
    • 这个并不是必须安装的依赖库。但是如果装上将会提高Ceres对稀疏矩阵的计算性能,提供更多可用的优化算法。所以虽然加入这个库之后Ceres的安装过程会更加繁琐,但是仍然推荐安装。这个库的原生版本本身对Windows的支持不好,所以在Windows上要使用这个专门针对Windows的衍生版本。另外,这个库还存在一个名为CXSparse的简化版本。(使用高版本如1.4和1.5在编译ceres会出现问题,因此我建议使用1.3.1)
  • 新建一个buildSrc目录,将上述包解压至此(如D:/buildSrc)。

  • 新建一个builded目录,用于Cmake生成,和VS构建。

  • 选择一个安装路径,如Eviroment目录。用于在cmake中指定(用于安装和生成相应的cmake配置文件)。

安装Eigen

Eigen库本身是并不需要安装的,解压放在某文件夹内即可。但是我更希望将他们这些库放在同一位置方便管理,如D:/Environment。这样也方便其他库的定位。

启动CMake GUI。指定源代码位置为D:/buildSrc/eigen-3.3.7,输出位置为D:/builded/eigen-3.3.7。编译平台根据系统环境选择“Visual Studio 15 2017 Win64”,下同。

  配置选项中:
    * 取消所有的Test类项。
    * CMAKE_INSTALL_PREFIX = D:/Environment/Eigen3

若要安装目录位于C盘,如C:/Program Files/,所以必须以管理员身份运行Visual Studio 2017,否则没有读写权限。

然后打开D:/builded/eigen-3.3.7/Eigen3.sln解决方案。分别以Debug和Release模式(x64)生成INSTALL项目以完成安装。

安装gflags

启动CMake GUI。指定源代码位置为D:/buildSrc/gflags,输出位置为D:/builded/gflags。同样Configure->选择平台VS2017 x64->设置配置选项->Generate。

配置选项中:
1. CMAKE_INSTALL_PREFIX = D:/Environment/gflags
2. 取消选中BUILD_Testing (可选)
3. 选中BUILD_SHARED_LIBS 以便生成.dll文件(可选)

打开生成gflags.sln,点生成——>批生成——>勾选install,debug和release——>点生成。

安装glog

同样的过程,使用CMake将glog的源代码生成为VS工程文件放入D:/builded/glog文件夹。同样也要注意CMake配置选项。

配置选项中:
1. CMAKE_INSTALL_PREFIX = D:/Environment/glog
2. 选中WITH_GFLAGS
3. gflags_DIR = D:/Environment/gflags/lib/cmake/gflags
4. 取消选中BUILD_TESTING (可选)
5. 选中BUILD_SHARED_LIBS以便生成.dll文件。如果该项不存在通过“Add Entry”手动加入。(可选)

打开生成glog.sln,点生成——>批生成——>勾选install,debug和release——>点生成。

建议生成动态库

SuiteSparse 的安装就相对前两个库麻烦一点。

首先依然是cmake-configure-generate。

配置选项中:
1. BUILD_METIS 取消勾选,否则在编译METIS库是会发生很多莫名其妙的错误。(图分割的库?)
2. HAVE_COMPLEX 取消勾选,否则也会有很多莫名其妙的错误,这些错误和平台的兼容性有关。
3. SUITESPARES_INSTALL_PREFIX = D:/Environment/suitesparse 
4. SHARED 取消勾选。如果选中会报错,宣称缺少一系列.lib文件。
5. OPENMP根据需要设置。

打开工程,点生成——>批生成——>勾选install,debug和release——>点生成。目前只生成了静态库文件,我们还需要动态链接库,即.dll文件。

下面我们在刚才的CMake中, 重新选中SHARED项,其他项不变,再次点击generate。打开工程,点生成——>批生成——>勾选install,debug和release——>点生成。因为再上一过程中.lib文件已经被生成并且安装(上一轮编译一定要生成INSTALL),所以这时不会再报错说缺少.lib文件了。此时四个依赖库都安装完毕,下面是主角Ceres了。

可以只生成静态库

安装Ceres-Solver

安装Ceres的主要困难在于复杂的CMakeList配置程序。在第一次Configure会得到一个长长的属性列表。因为Ceres默认使用的是SuiteSparse库,而经过改造的suitesparse-metis-for-windows的配置文件所给出的很多CMake变量(对外接口)与Ceres的接口对不上。因此需要手动添加很多内容,这也是最坑爹之处。

根据长时间的摸索,不断地实验和对CMakeList文档的研究,得出以下可行配置。

配置选项中:
# 依赖配置,如果自动找到了就不用配置,ceres的find_package全采用模块模式,findXXX.cmake在srcRoot/cmake/目录下。
1. Eigen3_DIR = D:/Environment/Eigen3/share/eigen3/cmake
2. gflags_DIR = D:/Environment/gflags/lib/cmake/gflags
3. glog_DIR = D:/Environment/glog/lib/cmake/glog
4. SUITESPARSE_CHECK_INCLUDE_DIRS = D:/Environment/suitesparse/include
5. SUITESPARSE_CHECK_LIBRARY_DIRS = D:/Environment/suitesparse/lib64
6. BLAS_LIBRARIES = D:/Environment/suitesparse/lib64/lapack_blas_windows/libblas.lib
7. LAPACK_LIBRARIES=D:/Environment/suitesparse/lib64/lapack_blas_windows/liblapack.lib
8. CMAKE_INSTALL_PREFIX = D:/Environment/Ceres。
#依赖勾选
9. LAPACK 选中:ceres直接使用LAPACK
10. CUSTOM_BLAS: 选中,使用手动编码的blas代替eigen(通常更快)
11. SUITESPARSE:选中,为了加速稀疏矩阵的运算
12. EIGENSPARSE: 选中,使用eigen作为稀疏线性代数库(有了suiteSparse不知道要不要勾选)
13. gflags: 选中
#其他编译选项
14. CMAKE_INSTALL_PREFIX 赋值 D:/Program Files/Ceres
15. BUILD_EXAMPLES 取消勾选。为了节省后续编译时间。
16. BUILD_TESTING 取消勾选,为了节省后续编译时间。
17. BUILD_SHARED_LIBS 勾选,以便生成动态链接库文件。
18. CMAKE_BUILD_TYPE 设为 Release。

打开刚刚生成的Ceres解决方案。切换编译器为Release模式。然后生成INSTALL项目,完成Release模式的编译和安装过程。

现在切换到Debug模式。然后右键单击“ceres”项目->属性->C/C+±>链接器->输入->附加依赖项。这里要注意属性管理也应设为Debug模式。

将下列库:

D:\Environment\suitesparse\lib64\libspqr.lib
D:\Environment\suitesparse\lib64\libcholmod.lib
D:\Environment\suitesparse\lib64\libccolamd.lib
D:\Environment\suitesparse\lib64\libcamd.lib
D:\Environment\suitesparse\lib64\libcolamd.lib
D:\Environment\suitesparse\lib64\libamd.lib
D:\Environment\suitesparse\lib64\suitesparseconfig.lib

改为(文件名后加d表示debug模式对应的库):

 D:\Environment\suitesparse\lib64\libspqrd.lib
 D:\Environment\suitesparse\lib64\libcholmodd.lib
 D:\Environment\suitesparse\lib64\libccolamdd.lib
 D:\Environment\suitesparse\lib64\libcamdd.lib
 D:\Environment\suitesparse\lib64\libcolamdd.lib
 D:\Environment\suitesparse\lib64\libamdd.lib
 D:\Environment\suitesparse\lib64\suitesparseconfigd.lib

其他库和设置保持原样。
此时重新生成INSTALL。完成Debug模式的编译和安装。

关于这一部分的配置也可以通过修改CMakeList实现,如果对cmake编程熟练甚至可以重写FindSuiteSparse以实现自动配置。这里推荐这篇文章《Ceres-Solver库使用(一)–windows下安装配置》。
配置环境变量

我的电脑->属性->更改设置->高级->环境变量->系统变量->Path->编辑。注意设置完环境变量之后需要重启Visual Studio以生效。

使用

在PATH中加入以下五个地址:

C:\Environment\Ceres\bin
C:\Environment\gflags\bin
C:\Environment\glog\bin
C:\Environment\suitesparse\bin
C:\Environment\suitesparse\lib64\lapack_blas_windows

至此,Ceres(含SuiteSparse)安装过程完成。
测试

在D:/Environment/ceres-solver/examples有很多实例。我一般使用VS新建工程然后复制C++源代码的形式测试。这样各个项目不会互相影响。不建议用CMake。
要记得在属性中加入各种库Include路径和Lib文件路径。包括涉及到的各种库:Ceres、Eigen、SuiteSparse、gflags、glog等等。最好Debug和Release模式分别测试一下运行状况。
成功“点亮” hello world
主要参考资料

*ceres-solver库编译说明 http://blog.csdn.net/liminlu0314/article/details/15860677
*Eigen+suitesparse for windows 安装 http://blog.csdn.net/xiamentingtao/article/details/50100549
*官方安装指南 http://ceres-solver.org/installation.html#windows
————————————————
版权声明:本文转载自CSDN博主「小政哥」的原创文章,根据实际尝试作出修改。
原文链接:https://blog.csdn.net/wzheng92/article/details/79504709

------------------2021年10月--------------------------------------------------------------------------
ceres2.0已经发布,上述流程依旧有效,下面是相关的源代码工程,及编译好的二进制文件。
Ceres2.0及相关依赖库源代码:https://download.csdn.net/download/blanklog/22400043
Vs2019+ceres2.0编译的二进制文件: https://download.csdn.net/download/blanklog/22398043

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值