《视觉SLAM十四讲》库环境配置笔记:windows下VS2017配置Eigen,Sophus,Ceres

笔记-------简单记录方法和有用链接,供查用

一、Eigen

Eigen Document:http://eigen.tuxfamily.org/dox/index.html

配置方法:

1. 下载Eigen库的包

             Eigen:http://eigen.tuxfamily.org/index.php?title=Main_Page

2. 解压后找到Eigen文件夹,配置。

         Eigen使用的比较多,建议拿出来放到一个自己经常使用的工程第三方库的文件夹里,我就是放到了常用的3rd party文件夹里。然后在vs中新建个控制台程序,添加下面的配置。

3. 测试是否成功,随便找一个Eigen的类型,如MatrixXd,配置成功就VS就自己能找到Eigen。

#include <iostream>
#include <Eigen/Dense>
using namespace Eigen;                           
using namespace std;

int main()
{
	MatrixXd m = MatrixXd::Random(3, 3);              //随机生成3*3的double型矩阵
	cout << "m =" << endl << m << endl;
	system("pause");
	return 0;
}

4. 总的来说,Eigen配置还是很简单的。但是熟悉它具有的一些功能还需要更多的使用

2020.3.1更新:Eigen作为依赖库时,有编译的必要

当我们使用Eigen作为第三方库,编译其它库时,cmake软件需要Eigen有.cmake文件。像我上面这样做已经可以满足使用的需要,甚至编译下面的ceres库也没有问题。还是强烈建议:cmake配置,生成一下工程,重新安装一下Eigen(install也仅仅是复制一些头文件,多了配置的cmake文件,速度很快)。                                        ---------来自一个菜鸡经历的教训

二、Sophus编译

下载Sophus:https://github.com/strasdat/Sophus

Sophus需要在Eigen基础上进行编译,然后将编译后的目录加入VS工程中即可。下面主要记录了利用Cmake编译的过程。

1. 下载好上面文件后,放到解压放到你常用的文件夹;下载好Cmake(Sophus的cmakelist文档里写了版本至少要3.4)

2. 打开Cmake,依次添加如下图所示,

      上面是你刚刚放置好的sophus文件夹位置,输出处新建一个build文件夹;

      下面是Eigen的文件夹目录。

3. 编译及我遇到的问题

     上一步弄好后,直接点击生成,出现了如下错误:

     打开sophus的文件夹的cmake_modules,里面有findEigen3.cmake这个文件,但是Cmake却没法找到。

     出现这个问题,是因为Cmake在Windows下使用时比较坑。使用上面findEigen3.cmake这个文件时,Cmake使用了一个命令

                                                                      “find_package()”

     但是Cmake没有找到。实际上在上一步中,我已经添加了Eigen的目录文件夹,所以不用find_package就可以。

     解决办法:打开Sophus下的CmakeList.txt,找到下面这个命令(很靠上的位置),用#注释掉。再次在Cmake中生成,就可以编译成功了。

 

4. 将Sophus文件夹加入到工程目录中,即可。

三、Ceres(目前未测试DEBUG)

这个库就比较麻烦,因为其依赖的库比较多,多个库编译有一个失败就会导致不成功,过程繁琐。但是库都没什么问题,也都支持windows,如果操作者有比较好的Cmake和VS使用熟练度,还是不难的。作为小白的我,误打误撞算是成功了,下面给出我的操作过程。

1. 下载相应的依赖库

Ceres:https://github.com/ceres-solver/ceres-solver

gflag:https://github.com/gflags/gflags

glog:https://github.com/google/glog

suiteparse-metis-for-windows:https://github.com/jlblancoc/suitesparse-metis-for-windows

2. 编译gflags和glog

    这一步比较简单,目的是生成两个库对应的include和lib文件夹。glog是依赖于gflags的,所以要先编译gflags。

    Cmake不用多说了,和编译Sophus类似。点了Configure后,如下图所示,这里如果想加快速度,可以取消BUILD_TESTING(后面都可以这样做),此外CMAKE_INSTALL_PREFIX是生成include和lib的目录,可以自己修改,但是要记住,后面会使用到。

       Cmake完成Generate后,在之前设置的build文件夹下找到生成的gflags.sln工程,重点以管理员运行VS2017,打开这个工程,找到INSTALL生成就可以(见图,后面类似),如果要配置不同位数和两个版本的库,多次生成就可以,在这里不多说。

       

       glog的配置不用修改太多,主要是gflags目录,如果之前做了修改,记得符合之前的修改就行。同样用管理员打开生成的sln工程, 找到INSTALL生成。

        以上两步可以通过生成目录里,是否有对应的lib和include文件来检验是否成功。

3. suiteparse

       编译这个库的时候,需要修改一下自带的cmakelist文件,不去使用。首先直接用Cmake的Configure,会提示工程无效,查看Cmake的错误,提示BLAS和LAPACK not found。这也是两个库,但是不是必须的(下一步会有解决办法),所以我们打开Cmakelist文件,注释掉这部分,再次配置并生成,就可以通过了。注意原有的配置文件中,输出lib和include文件目录是另外预设的,如有需要必须修改。

       打开suiteparse的sln工程,直接生成INSTALL,查看之前预设的lib文件夹是否有输出,即可检验是否成功。

4. Ceres

       第一次误打误撞用cmake编译,然后用VS生成dll,并且用程序测试成功了,但是后来发现,自己忽略了Cmake的报错,使得编译的成功的库中没有Suiteparse部分,所以又一步一步重新开始找问题。之前的步骤实际上没有问题,关键是在这一步中,需要添加一些步骤。

        首先,cmake设置好路径,配置。

        注意下面的输出!!!其实Cmake的很多操作不难,我们做的很多是要根据错误输出来修正,补充缺失的库或者目录。

        下面两张图是我的正确配置(Build_Type为Release),其中涉及到的依赖库就是gflag,glog,suiteparse(依赖glog和BLAS,LAPACK),Eigen。注意上面的目录设置,如果放在了C:\Program Files (x86)下,cmake可以自动检测到,如果不是,需要自己添加。

        这里我们需要添加的是上面第一张图中这几个lib(属于suiteparse),还有BLAS和LAPACK。

                            

         其实BLAS和LAPACK的库文件,已经在我们下载的suiteparse中包含了(包括32和64,Release和Debug的lib,dll),如上图可以找到。

         在Cmake中找到BLAS和LAPACK对应的lib,后面相关的AMD,CAMD等等是相同设置的。

         如下图,找到LAPACK_LIBRARIES,后面需要时一个lib文件,我们在上图中找到64位的liblapack.lib(Release),设置为这一项的值。同样我们可以设置BLAS。如果要编译Debug版本库时,选择debug的库即可。

         按照以上方法,我们同样可以设置AMD,CAMD等等几项,不同的是这些的包含目录,库目录在suiteparse编译后生成的输出文件夹中。

         以上完成后,直接点击Configure,查看输出的结果,如果缺少上面说到的依赖项,使得生成没有包括suiteparse,就需要按照输出的提示检查对应的地方是否设置对了。

         同时还有可能出问题如下图所示,则需要检查是不是将该设置为库的地方设置为目录了。

        完成以上步骤后,如果Cmake生成成功,同样用VS管理员打开build文件夹下的Ceres.sln,生成对应版本(Release或Debug)即可。(如果前面没问题,这里生成也没有问题。) 

 

5. 测试

       使用SLAM十四讲中的例程测试,还需要在工程中配置一些东西,由于这需要较多路径设置,个人不建议像opencv一样加入到系统环境变量中,建议单个工程使用就好。

       a. 附加包含目录和预处理器(预处理器修改见:https://www.cnblogs.com/21207-iHome/p/9297329.html

         

          b. 附加库目录和附加依赖项

         

            c. 复制一些dll文件到exe文件夹下(没有找到更好的解决办法,目前我只会这样做)

              完成以上几步后,编译可以通过,但是运行会提示缺失几个dll文件,如下图,分别是ceres.dll和blas,lapack相关的dll(在suiteparse库下找到)

             成功完成上面的步骤后,就可以成功使用ceres了,如下图。这里是Release版本,Debug版本在上面选取库文件时选择对应的debug版本,即可实现一样的结果。 

         

  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 19
    评论
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值