Windows系统下Ceres Solver库的安装

时间:2024-05-21 15:37:21

转载请注明出处:http://my.****.net/ye_shen_wei_mian

很久没有更新过博客了,最近要在Windows系统下使用到Ceres Solver,所以自己去配置了一下,还是踩了不少的坑的,所以值得写一篇博客来记录下配置过程,以免时间久了不记得了又再掉入到坑里。

在Windows系统下安装配置Ceres Solver需要不少东西,首先需要先上github把最新的版本(截至2019.03.17)拉下来,或者像我一样干脆下个ceres-solver-1.14.0.tar.gz,放到某个自己指定的目录下,解压到当前文件夹中,会出现类似ceres-solver-1.14.0这样的文件夹,比方说我本地路径就是D:\ceres\ceres\ceres-solver-1.14.0

然后完成除了很多后面出现的blas相关的加速库以外的近乎完整版的安装,除了它要求的glog,gflas,Eigen以外,你还需要一大堆的例如AMD,CXSPARSE,CHOLMOD,SUITESPARSE,BLAS之类的一堆加速的和线性代数和稀疏矩阵之类的运算库,不用说也知道要是在windows底下安装极其麻烦。注意了,这里说的是近乎完整版,如果你说你只需要用Eigen库作依赖项的版本,那可以忽略,还是比较容易配置的。

还好Github上面有一个叫做 suitesparse-metis-for-windows的工程,这个工程可以说是帮了我们一个大忙,至于这个工程怎么安装和编译,需要注意一些什么,请翻到我的另外一篇博文《Windows+Visual Studio下生成g2o库教程(结合Cholmod库)》,详细按照在“进行suitesparse-metis库的安装”的段落里所说的进行操作就可以完成。

那么上述的这一步就不再赘述了,让我们重新关注回Ceres Solver本身的配置当中来。

1.首先我们先搞定gflags和glog。注意glog的配置是要用到gflags的,所以我们先去配置gflags。

gflags其实配置起来很简单,但这里有一个坑。如果不做这一步的话,后面等所有东西编译完了链接的时候就会报“gflags_static.lib 无法解析的外部符号 __imp__PathMatchSpec”的错误,查了下网上的博客说这是gflags为了适配Windows 2000/XP的过时东西,在新版本的操作系统里已经去掉了那个lib,所以后面会报错。所以这里需要首先进入gflags的源码里找到这个文件(比方说我是D:\ceres\gflags\gflags\src\defines.h.in)然后打开,找到这两行代码

// Define if you have the <shlwapi.h> header file (Windows 2000/XP).
#cmakedefine HAVE_SHLWAPI_H

把“#cmakedefine HAVE_SHLWAPI_H”这一行给注释掉

然后就在cmake里输入好路径,点configure和generate,就会在你想要build的路径下出来lib库(build的文件夹路径\lib\Release\gflags_static.lib),找到这个lib以后,可以稍微整理一下,gflags的文件夹底下新建一个include文件夹和一个lib文件夹用来专门存放头文件和那个lib,比如我的就是“D:\ceres\gflags\include”和“D:\ceres\gflags\lib”,把对应的东西放到里面即可,只是为了到时候配置的时候好找一点罢了。

然后glog的话,其实没啥好说的,也是用cmake进行配置,唯一需要注意的是这里的gflags_DIR是D:\ceres\gflags\build就好了,这是我指定build gflags的那个文件夹,里面有gflags-config.cmake这玩意(你们根据自己的路径去找一下),cmake要的就是这个存放这个东西的那个路径。

搞定了这两个东西以后,终于可以开始进入正题了。

2.Ceres Solver的配置。

这个时候你就知道为什么suitesparse-metis库有用了,因为基本上Ceres需要的大部分这里面都有。

还是按照《Windows+Visual Studio下生成g2o库教程(结合Cholmod库)》里我说的老套路,就是cmake里面出现了什么标红的,就一个个地去把它们的路径给添加上。但是同时由于可能没添加之前缺乏一些库,所以点击完configure以后cmake可能会把你之前勾选的一些东西给去掉,所以也要注意检查一下。

为了节省时间,我们只Build Release版本的,需要Debug版本的自己再重新照猫画虎弄一下即可。

那么理论上,我们需要完成的配置项有Eigen,glog,gflags,CXSPARSE.METIS,LAPACK,SUITESPARSE,BLAS,AMD,CAMD,CCOLAMD,CHOLMOD,COLAMD,SUITESPARSEQR等,所以可以看到如果要一个个安装和配置将会是非常非常的麻烦。

但是还是要耐心,一个个地去完成所有的路径添加。我把我的cmake配置表贴在这里,大家可以对照着看看参考下。(路径得自己改哦,每个人安装依赖库的路径各不相同,只是给你们看看要如何对应地找文件找哪个文件而已)。这个配置表不是一开始就这样的,你得不断地重复着添加路径然后configure然后再添加路径的过程,最后达到你认为你想要配置的东西都基本搞定了的的时候为止。

Windows系统下Ceres Solver库的安装

Windows系统下Ceres Solver库的安装

Windows系统下Ceres Solver库的安装

搞定了以后就可以generate了,然后耐心地等待它自己build,应该会生成ceres.lib,gtest.lib,test_util.lib三个文件。最后也可以跟上面步骤一样,整理出一个include文件夹和一个lib文件夹。然后把D:\ceres\ceres\ceres_bin\config\ceres\internal路径底下的config.h考到你自己整理的那个include文件夹底下的internal文件夹里面即可。

最后的话就是向VS工程里配置我们生成好的ceres库啦。

这个比较简单,就不多说了。反正就是刚才整理好的ceres,gflags和glog的include文件夹和lib文件夹的路径配置而已。

连接器输入项的话就这几个:

ceres.lib
gtest.lib
test_util.lib
glog.lib
gflags_static.lib

好啦,就到这里为止吧,祝大家顺利在WIndows下用上Ceres Solver啦。