《视觉SLAM⼗四讲》库环境配置笔记:windows下VS2017配
置Eigen,Soph。。。
笔记-------简单记录⽅法和有⽤链接,供查⽤
⼀、Eigen
配置⽅法:
1. 下载Eigen库的包
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需要在Eigen基础上进⾏编译,然后将编译后的⽬录加⼊VS⼯程中即可。下⾯主要记录了利⽤Cmake编译的过程。
1. 下载好上⾯⽂件后,放到解压放到你常⽤的⽂件夹;下载好Cmake(Sophus的cmakelist⽂档⾥写了版本⾄少要3.4)
2. 打开Cmake,依次添加如下图所⽰,
上⾯是你刚刚放置好的sophus⽂件夹位置,输出处新建⼀个build⽂件夹;
下⾯是Eigen的⽂件夹⽬录。
3. 编译及我遇到的问题
上⼀步弄好后,直接点击⽣成,出现了如下错误:
打开sophus的⽂件夹的cmake_modules,⾥⾯有ake这个⽂件,但是Cmake却没法到。
出现这个问题,是因为Cmake在Windows下使⽤时⽐较坑。使⽤上⾯ake这个⽂件时,Cmake使⽤了⼀个命令
“find_package()”
但是Cmake没有到。实际上在上⼀步中,我已经添加了Eigen的⽬录⽂件夹,所以不⽤find_package就可以。
解决办法:打开Sophus下的,到下⾯这个命令(很靠上的位置),⽤#注释掉。再次在Cmake中⽣成,就可以编译成功了。
4. 将Sophus⽂件夹加⼊到⼯程⽬录中,即可。
三、Ceres(⽬前未测试DEBUG)
这个库就⽐较⿇烦,因为其依赖的库⽐较多,多个库编译有⼀个失败就会导致不成功,过程繁琐。但
是库都没什么问题,也都⽀持windows,如果操作者有⽐较好的Cmake和VS使⽤熟练度,还是不难的。作为⼩⽩的我,误打误撞算是成功了,下⾯给出我的操作过程。
1. 下载相应的依赖库
2. 编译gflags和glog
这⼀步⽐较简单,⽬的是⽣成两个库对应的include和lib⽂件夹。glog是依赖于gflags的,所以要先编译gflags。
Cmake不⽤多说了,和编译Sophus类似。点了Configure后,如下图所⽰,这⾥如果想加快速度,可以取消BUILD_TESTING(后⾯都可以这样做),此外CMAKE_INSTALL_PREFIX是⽣成include和lib的⽬录,可以⾃⼰修改,但是要记住,后⾯会使⽤到。
Cmake完成Generate后,在之前设置的build⽂件夹下到⽣成的gflags.sln⼯程,重点以管理员运⾏V
S2017,打开这个⼯程,到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,suitep
arse(依赖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,就需要按照输出的提⽰检查对应的地⽅是否设置对了。
mysql下载的vs库放在那个文件里同时还有可能出问题如下图所⽰,则需要检查是不是将该设置为库的地⽅设置为⽬录了。
完成以上步骤后,如果Cmake⽣成成功,同样⽤VS管理员打开build⽂件夹下的Ceres.sln,⽣成对应版本(Release或Debug)即可。(如果前⾯没问题,这⾥⽣成也没有问题。)
5. 测试
使⽤SLAM⼗四讲中的例程测试,还需要在⼯程中配置⼀些东西,由于这需要较多路径设置,个⼈不建议像opencv⼀样加⼊到系统环境变量中,建议单个⼯程使⽤就好。
b. 附加库⽬录和附加依赖项
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论