Win10+vs2019配置Ceres Solver,含Eigen,gflags,glog,suitsparse(亲测可用)

目录

1.环境

2.环境库下载

2.1 Ceres Solver2.0.0

2.2 Eigen3.3.8

2.3 gflags

2.4 glog

2.5 suitsparse-metis-for-windows

3.环境库配置

3.1 Eigen编译

3.2 gflags编译

3.3 glog编译

3.4 Suitesparse编译

3.5 Ceres Solver编译

4.环境变量配置

5.VS2019环境配置

6.测试

6.1 helloworld测试

6.2 bundle_adjuster测试

7.参考博客


亲测可用 2023-04-27。

1.环境

  • Windows10
  • Visual Studio 2019 Community
  • CMake GUI 3.19.8

2.环境库下载

2.1 Ceres Solver2.0.0

下载地址http://ceres-solver.org/installation.html

2.2 Eigen3.3.9

Eigen(开源库)是一个高层次的C ++库,有效支持线性代数,矩阵和矢量运算,数值分析及其相关的算法。

下载地址http://eigen.tuxfamily.org/index.php?title=Main_Page

2.3 gflags

gflags是google开源的一种命令行解析工具,主要用于解析用命令行执行可执行文件时传入的参数。

下载地址https://github.com/gflags/gflags

2.4 glog

glog是google提供的轻量级日志库,它提供了基于C++样式流和各种帮助程序宏的日志记录API,你可以很简单的将信息传输到LOG来记录消息。

下载地址https://github.com/google/glog

2.5 suitsparse-metis-for-windows

此库非必须安装。但安装后可以提高Ceres对稀疏矩阵的计算性能,提供更多的优化算法,此库安装后会使Ceres库的安装过程变得繁琐,但仍建议安装。这个库的原生版本本身对Windows的支持不好,所以在Windows上要使用这个专门针对Windows的衍生版本。另外,这个库还存在一个名为CXSparse的简化版本。

下载地址https://github.com/jlblancoc/suitesparse-metis-for-windows

3.环境库配置

首先建立一个文件夹,建议除C盘的其他盘,例如:E:\ceres_install,将压缩包解压到该文件夹内,另外为每个库按照“库名-build”的命名方式新建文件夹,用以存放生成后的工程文件,如下图所示(请忽略图中opencv4.5路径,根据自身情况而定,此次仅作演示):

并在该文件中新建一个Install文件夹,用于存储各依赖库的.h\.lib\.dll等文件,Install文件夹中新建五个文件夹如下:

3.1 Eigen编译

启动Cmake,添加源码位置和输出位置的地址,如下图所示:

点击configuer,选择vs2019,x64,在配置选项中

  • 取消选中BUILD_TESTING
  • 取消选中EIGEN_SPLIT_LARGE_TSETS
  • CMAKE_INSTALL_PREFIX=E:\Ceres_Install\install\eigen(是install文件夹中的eigen文件夹)

几乎不选中任何选项,配置图如下:

然后再次点击configuer,会出现如下红色警告,

该Warning就是提示你注意Cmake版本更新:Cmake的版本号高于CMakeLists.txt中设置的最低版本号,可能会与旧版本不兼容,如果低于指定版本会出现报错,需要更新Cmake的版本。经过测试如果版本高于指定版本号(2.8.12)则没有问题(暂时未发现)。也可以在CMakeLists.txt中更改版本号,本人以为最好不要这么做,有好奇者可以尝试一下。CMakeLists.txt地址在解压后的eigen-3.3.8中。

然后点击Generate->Open Project,此时用VS2019打开eigen.sln,分别用Release X64和Debug X64下生成INSTALL。

生成全部成功则表明eigen库安装成功,检查E:\opencv4.5\cere_install\install\eigen中是否包含如下俩个文件夹:

3.2 gflags编译

在Cmake中指定gflags源码地址:E:\opencv4.5\cere_install\gflags-master,并指定输出地址:E:\opencv4.5\cere_install\gflags_build,点击configure,选择vs2019 X64,在配置选项中

  • 取消选中BUILD_TESTING
  • CMAKE_INSTALL_PREFIX=E:\opencv4.5\cere_install\install\gflags
  • 选中BUILD_SHARED_LIBS 以便生成.dll文件

选项配置结果如下图所示:(不存在的选项可通过“Add Entry”进行添加)

然后再次点击Configure->Generate->Open Project,打开刚生成的解决方案gflags.sln,在VS2019分别在Release x64和Debug x64下生成ALL_BUILD和INSTALL项目。

3.3 glog编译

在Cmake中指定gflags源码地址:E:\opencv4.5\cere_install\glog-master,并指定输出地址:E:\opencv4.5\cere_install\glog_build,点击configure,选择vs2019 X64,在配置选项中

  • 取消选中BUILD_TESTING
  • CMAKE_INSTALL_PREFIX = E:\opencv4.5\cere_install\install\glog
  • 选中BUILD_SHARED_LIBS 以便生成.dll文件(如果没有可进行添加,添加时type选择为bool)
  • 选中WITH_GFLAGS
  • gflags_DIR = E:\opencv4.5\cere_install/install/gflags\lib\cmake\gflags(该项地址一般会自动定位,检查一下以确保正确,没有的话可自行添加)

选项配置结果如下图所示:

然后再次点击Configure->Generate->Open Project,打开刚生成的解决方案glog.sln,在VS2019分别在Release x64和Debug x64下生成ALL_BUILD和INSTALL项目。

3.4 Suitesparse编译

在Cmake中指定gflags源码地址:E:\opencv4.5\cere_install\suitesparse-master,并指定输出地址:E:\opencv4.5\cere_install\suitesparse_build,点击configure,选择vs2019 X64,在配置选项中

  • BUILD_METIS可以不选
  • 取消选中HAVE_COMPLEX,否则也会有很多莫名其妙的错误,这些错误和平台的兼容性有关
  • CMAKE_INSTALL_PREFIX = E:\opencv4.5\cere_install\install\suitesparse
  • 选中BUILD_SHARED_LIBS 以便生成.dll文件
  • 先取消选中SHARED。如果选中会报错,宣称缺少一系列.lib文件。
  • OPENMP根据需要设置,此处不做更改

选项配置结果如下图所示:

configure->generate->open project,打开刚生成的对应解决方案SuiteSparseProject.sln。分别以Debug和Release模式(x64)生成ALL_BUILD项目和INSTALL项目 。

生成成功后(应该Debug有14个,Relsease有15个项目,成功即可),然后再选中SHARED项,其他项不变,再次点击generate。之后用Visual Studio重新打开此解决方案。然后此时重新以Debug和Release模式(x64)分别再次生成ALL_BUILD项目和INSTALL项目。因为再上一过程中.lib文件已经被生成并且安装(上一轮编译一定要生成INSTALL),所以这时不会再报错说缺少.lib文件了。此时四个依赖库都安装完毕。

3.5 Ceres Solver编译

(1)如果没有编译Suitesparse,ceres的编译可参考如下博客:http://www.mamicode.com/info-detail-2688186.html

(2)若安装了Suitesparse,可参考如下流程进行编译。

在Cmake中指定gflags源码地址:E:\opencv4.5\cere_install\ceres-solver-2.0.0,并指定输出地址:E:\opencv4.5\cere_install\ceres_build,点击configure,选择vs2019 X64,在配置选项中

  • 取消选中BUILD_EXAMPLES
  • 取消选中BUILD_TESTING
  • 选中BUILD_SHARED_LIBS,以便生成动态链接库文件
  • 选中CUSTOM_BLAS
  • 选中LAPACK
  • 选中GFLAGS、GLOG,GLOG若没有可通过“Add Entry”进行添加,type选择bool,查看gflags_DIR和glog_DIR是否正确定位:gflags_DIR=E:/opencv4.5/cere_install/install/gflags/lib/cmake/gflags,glog_DIR=E:/opencv4.5/cere_install/glog_build。点击“Advanced”可在列表最后查看,如下图所示:

  • 添加BLAS_LIBRARIES项,type为FILEPATH类,赋值 E:/opencv4.5/cere_install/suitesparse-master/lapack_windows/x64/libblas.lib
  • 添加LAPACK_LIBRARIES项,type为FILEPATH类,赋值 E:/opencv4.5/cere_install/suitesparse-master/lapack_windows/x64/liblapack.lib
  • 选中EIGENSPARSE
  • CMAKE_BUILD_TYPE 设为 Release
  • 选中CXSPARSE
  • 检查地址Eigen3_DIR=E:/opencv4.5/cere_install/eigen_build
  • 选中SUITESPARSE,注意这一选项会自动取消选中
  • CMAKE_INSTALL_PREFIX = E:/opencv4.5/cere_install/install/ceres

选项配置结果如下图所示:

然后检查AMD、BLAS、CAMD、CCOLAMD、CHOLMOD、CXSPARSE、COLAMD、SUITESPARSE、SUITESPARSEQR等9个头文件的路径以及相应的9个静态库的路径是否正确,若不正确,需要手动配置。

勾选Grouped和Advanced可定位到相应的位置:

点击Configure出现如下红色字样为正常情况,不必担心:

点击Generate,生成VS工程文件,打开Ceres.sln,切换编译器为Release模式,然后生成ALL_BUILD和INSTALL项目,完成Release模式的编译和安装过程。

切换到Debug模式。然后右键单击“ceres”项目->属性 ->链接器->输入->附加依赖项,注意配置要更改为Debug,将以下红框中7个Release版本的库

更改为Debug版本的库,例如libspqr->libspqrd。如下图所示:

然后用Debug X64再次编译ALL_BUILD和INSTALL项目。

4.环境变量配置

我的电脑->属性->高级系统设置->环境变量->系统变量->Path->编辑。注意设置完环境变量之后需要重启Visual Studio以生效。在path中添加以下地址:

安装完成。

5.VS2019环境配置

打开VS2019,新建工程文件,依次点击属性管理器->Debug|x64->添加新项目属性表

点击添加,双击点开刚才新建的属性表,设置属性表属性。我这里属性表命名为:CerePropertySheetd

设置包含目录 :如图,点击VC++目录下的包含目录进行编辑。输入之后点击确定。

同样的方法添加库目录:

点击C/C++>附加包含目录,添加E:\opencv4.5\cere_install\eigen-3.3.8

设置附加依赖项。点击链接器下的输入,找到右边的附加依赖项进行编辑。如图。输入之后点击确定。

如需要Release型的附加依赖项,建议专门为Release新建一个属性表,新建方法及设置同上,只需在附加依赖项做如下更改:

完成之后点击属性页上的确定,属性表属性设置完成。

以后新建工程时只需要将这两个属性表添加到属性管理器中即可,避免每次环境配置的麻烦。

6.测试

在该路径下E:\opencv4.5\cere_install\ceres-solver-2.0.0\examples有许多例子可供测试。下述为helloworld.cc和bundle_adjuster.cc的测试过程,bundle_adjuster.cc运行成功则说明suitesparse安装成功。

新建VS2019工程项目,在属性管理器中分别添加刚刚新建的Debug和Releae型的属性表。注意:添加到X64中。

将该路径下E:\opencv4.5\cere_install\ceres-solver-2.0.0\examples的如下项目copy到所建VS工程路径下:

所需的测试数据集可在官网下载:http://grail.cs.washington.edu/projects/bal/final.html

将下载好的数据集也放到刚刚新建的工程路径下,方便后续头文件和源文件的添加。

6.1 helloworld测试

打开新建的VS工程,本文命名项目为ceresolvertest,在解决方案资源管理器中右击源文件选择添加现有项,添加helloworld.cc,分别在Debug和Release版本下进行测试。如发现有以下错误信息:

双击错误信息,跳转到jet.h,在其中添加头文件#include “corecrt_math_defines.h”,即可成功运行。

成功运行结果如下: