Win10+VS2019配置Ceres Solver,含Eigen、gflags、glog、merit、suitesparse
前段时间配置了Ceres Solver库,但是没有安装SuiteSparse,所以昨天又尝试了一下把它也安装上,于是…又配了一整天,失败了一整天,记录一下整个过程以及容易出错的地方。
1.环境
- Windows 10
- Visual Studio 2019 Community
- Cmake GUI 3.19.0
2.源代码包
1.Cere Solver 2.0.0
下载地址 http://ceres-solver.org/installation.html
2.Eigen 3.3.8
著名的矩阵运算库
下载地址 http://eigen.tuxfamily.org/index.php?title=Main_Page
3.gflag
GFlags是Google开源的一个命令行flag(区别于参数)库
下载地址 https://github.com/gflags/gflags
4.glog
Google Glog是Google的一个开源库,用于实现应用级别的logging。 它提供了一系列类似于C++流风格的logging API,以及一些预定义的宏。它有点类似于C里面的assert,但是比它具备更丰富的输出信息以及使用灵活性。
下载地址 https://github.com/google/glog
5.suitesparse-metis-for-windows
这个并不是必须安装的依赖库。但是如果装上将会提高Ceres对稀疏矩阵的计算性能,提供更多可用的优化算法。所以虽然加入这个库之后Ceres的安装过程会更加繁琐,但是仍然推荐安装。这个库的原生版本本身对Windows的支持不好,所以在Windows上要使用这个专门针对Windows的衍生版本。另外,这个库还存在一个名为CXSparse的简化版本。
下载地址:https://github.com/jlblancoc/suitesparse-metis-for-windows
3.配置Ceres
首先建立一个文件夹,如D:\Ceres_Install,将下载的源代码包放在该文件夹下,然后把所有源代码解压放到对应的子文件夹内。另外为每个库按照“库名-build”的命名方式新建文件夹,用以存放生成后的工程文件。
再在其中新建一个install文件夹,install里新建5个文件夹。
1.Eigen
启动Cmake,指定源码位置和输出位置,如图
点击configure,选择vs2019 X64,然后在配置选项中
- 取消所有Test类项
- CMAKE_INSTALL_PREFIX=D:\Ceres_Install\install\eigen(是install文件夹中的eigen文件夹)
然后再次点击Configure->Generate->Open Project,,此时会以VS打开项目(也有教程建议以管理员身份运行VS),分别在Release x64和Debug x64下生成INSTALL。
生成全部成功则说明eigen库安装完成,检查D:/Eigen3里是否存在include和share两个文件夹。
2.gflags(在glog前安装)
和Eigen一样,在Cmake中指定gflags的源码位置和输出位置(gflags-build),点击configure,选择vs2019 X64,在配置选项中
- 取消选中BUILD_Testing
- !!!CMAKE_INSTALL_PREFIX =D:/Ceres_Install/install/gflags
- 选中BUILD_SHARED_LIBS 以便生成.dll文件
然后再次点击Configure->Generate->Open Project,打开刚生成的解决方案gflags.sln,在VS2019分别在Release x64和Debug x64下生成ALL_BUILD和INSTALL项目。
3.glog
同样的过程,使用CMake将glog的源代码生成为VS工程文件放入glog-build文件夹。同样也要注意CMake配置选项。
- 取消选中BUILD_TESTING
- CMAKE_INSTALL_PREFIX = D:/Ceres_Install/install/glog
- 选中WITH_GFLAGS
- gflags_DIR = D:/Ceres_Install/install/gflags/lib/cmake/gflags
- !!! 选中BUILD_SHARED_LIBS以便生成.dll文件。如果该项不存在通过“Add Entry”手动加入。
然后再次点击Configure->Generate->Open Project,打开刚生成的解决方案glog.sln,在VS2019分别在Release x64和Debug x64下生成ALL_BUILD和INSTALL项目。
4.SuiteSparse
和前几个一样,先Cmake,configure,在配置中
- 选中BUILD_METIS。
- 取消选中HAVE_COMPLEX,否则也会有很多莫名其妙的错误,这些错误和平台的兼容性有关。
- SUITESPARES_INSTALL_PREFIX =D:/Ceres_Install/install/suitesparse 。
- !!! 取消选中SHARED。如果选中会报错,宣称缺少一系列.lib文件。
- OPENMP根据需要设置。
configure->generate->open project,打开刚生成的对应解决方案SuiteSparseProject.sln。分别以Debug和Release模式(x64)生成ALL_BUILD项目和INSTALL项目 。
下面我们在刚才的CMake中, 重新选中SHARED项,其他项不变,再次点击generate。之后用Visual Studio重新打开此解决方案。然后此时重新以Debug和Release模式(x64)分别再次生成ALL_BUILD项目和INSTALL项目。因为再上一过程中.lib文件已经被生成并且安装(上一轮编译一定要生成INSTALL),所以这时不会再报错说缺少.lib文件了。此时四个依赖库都安装完毕。
5.Ceres Solver
如果没有安装SuiteSparse,那ceres安装可以参考
http://www.mamicode.com/info-detail-2688186.html
博主写的很详细。
如果安装了SuiteSparse,后续Ceres配置稍微有点繁琐,由于我下载的SuiteSparse库比较新,所以很多博客的教程和我在配置的时候有所出入。这里就记一下我自己的过程。
首先还是Cmake,Configure,然后是配置!
- 取消选中BUILD_EXAMPLES。为了节省后续编译时间。
- 取消选中BUILD_TESTING。为了节省后续编译时间。
- 选中BUILD_SHARED_LIBS,以便生成动态链接库文件。
- CMAKE_BUILD_TYPE 设为 Release。
- 选中CUSTOM_BLAS。
- 添加BLAS_LIBRARIES项(FILEPATH类)赋值 D:/Ceres_Install/suitesparse-master/lapack_windows/x64/libblas.lib
- 选中LAPACK。
- 添加LAPACK_LIBRARIES项(FILEPATH类)赋值 D:/Ceres_Install/suitesparse-master/lapack_windows/x64/liblapack.lib
- 选中EIGENSPARSE。
- Eigen3_DIR=D:/Ceres_Install/eigen-build
- 选中GFLAGS和GLOG,并且正确定位。一般再次configure应该可以自动定位,可以勾选上Advanced查看自动定位路径,如果配置信息显示NOTFOUND,可以手动add entry添加
- 选中SUITESPARSE,注意这一选项会自动取消选中。
- !!! 添加CMAKE_INSTALL_PREFIX 赋值 D:/Ceres_Install/install/ceres。
- 重点!!需要手动配置配置AMD、BLAS、CAMD、CCOLAMD、CHOLMOD、CXSPARSE、COLAMD、SUITESPARSE、SUITESPARSEQR等9个头文件的路径以及相应的9个静态库的路径。
可以点击Grouped,依次手动定位到相应的路径
另附其他配置选项供参考对比
至此,再次Configure,应该没有报错信息了
点击Generate,生成VS工程文件,打开Ceres.sln,切换编译器为Release模式,然后生成ALL_BUILD和INSTALL项目,完成Release模式的编译和安装过程。
切换到Debug模式。然后右键单击“ceres”项目->属性 ->链接器->输入->附加依赖项。这里要注意属性配置也应设为Debug模式。
将以下7个Release版本的库改为Debug版本的库
D:\Ceres_Install\install\suitesparse\lib\libspqr.lib
D:\Ceres_Install\install\suitesparse\lib\libcholmod.lib
D:\Ceres_Install\install\suitesparse\lib\libccolamd.lib
D:\Ceres_Install\install\suitesparse\lib\libcamd.lib
D:\Ceres_Install\install\suitesparse\lib\libcolamd.lib
D:\Ceres_Install\install\suitesparse\lib\libamd.lib
D:\Ceres_Install\install\suitesparse\lib\suitesparseconfigd.lib
调整为Debug版本库:
D:\Ceres_Install\install\suitesparse\lib\libspqrd.lib
D:\Ceres_Install\install\suitesparse\lib\libcholmodd.lib
D:\Ceres_Install\install\suitesparse\lib\libccolamdd.lib
D:\Ceres_Install\install\suitesparse\lib\libcamdd.lib
D:\Ceres_Install\install\suitesparse\lib\libcolamdd.lib
D:\Ceres_Install\install\suitesparse\lib\libamdd.lib
D:\Ceres_Install\install\suitesparse\lib\suitesparseconfigd.lib
然后生成ALL_BUILD和INSTALL项目,完成Debug模式的编译和安装过程。
4.环境变量配置
我的电脑->属性->高级系统设置->环境变量->系统变量->Path->编辑。注意设置完环境变量之后需要重启Visual Studio以生效。在path中添加以下地址:
安装结束!!
5.测试
在C:/Ceres_Install/ceres-solver/examples有很多实例。可以使用VS新建工程然后复制C++源代码的形式测试。在新建的项目中,要在属性中加入包含目录、库目录以及附加依赖项
包含目录:
库目录:
C/C++>附加包含目录:D:\Ceres_Install\eigen-3.3.8
链接器->输入->附加依赖项(根据自己的需要加吧):
ceres.lib
gflags.lib
glog.lib
libspqr.lib
libcholmod.lib
libccolamd.lib
libcamd.lib
libcolamd.lib
libamd.lib
liblapack.lib
libblas.lib
suitesparseconfig.lib
metis.lib
把example中的helloworld.cc里的代码copy进来,运行,发现有错误信息提示
双击错误信息,跳转到jet.h,在其中添加头文件#include “corecrt_math_defines.h”,即可成功运行。
想测试自己有没有成功安装suitesparse,可以用example中的bundle_adjuster测试,但要记得将example中的bal_problem.h,bal_problem.cpp以及snavely_reprojection_error.h移至工程路径下,同时官网提供了数据集,可以自己下载后放在工程目录下,并在bundle_adjuster.cpp中添加文件名,如“problem-93-61203-pre.txt"
运行结果:
累了,毁灭吧,祝大家成功配库,愿天下没有配库。
参考博客:
1.http://www.mamicode.com/info-detail-2688186.html
2.https://blog.csdn.net/wzheng92/article/details/79504709
3.https://blog.csdn.net/xixihaha369300/article/details/83546473