前言
投入许多时间,今天终于将ORBSLAM3在Win10上配置成功。过程中并没有做很详细的记录,主要是因为大部分问题网上的资料已经足够,没必要将造轮子的理论再誊抄一遍。尽管没有详细的过程,但是我认为配置的整体思路还是很有借鉴意义的,现在记录下来,一者是作为自己日后的参考,二来则可以给他人带来方便。闲言少叙,书归正传,指南如下:
环境
Win10
VS2017
ORB-SLAM3_V0.3
Release x64 /MT
第三方库的构建与安装
第三方库的源代码来自:
https://github.com/chanho-code/ORB-SLAM3forWindows
这位仁兄的第三方库,经过他自己的修改,构建编译起来几乎一路绿灯,真是良心之作。这里要注意的是,他所提供的所有第三方库,不仅构建出 x64 Release MT 配置下的静态链接库,还要再构建出相应的动态链接库。
我选择在工程目录中新建 3rd 文件夹存放所有的第三方库,各个库再按照名称新建文件夹进行存放。每个库文件夹内再新建两个文件夹,include 文件夹存放头文件,lib 文件夹存放相应的静态与动态链接库,大抵是下图这个样子:
所有用到的第三方库如下:
要注意作者只提供了以下几个库:
- DBoW2 按照教程编译安装即可。
- Eigen3 作者提供的 Eigen3 库,在编译 g2o 时会报出存在弃用函数的错误,我直接将作者提供的 Eigen 更换为 ORB-SLAM2 上的 Eigen 版本,问题完美解决。读者也可以参照如此思路,更换Eigen版本。
- g2o 按照教程构建编译即可。
- Pangolin 我没有用作者的库,而是直接沿用了 ORB-SLAM2 的库。这里一定要注意,引用的 Pangolin 的库文件一定要完整,只有一个 Pangolin.lib 的话貌似是跑不了的,会有各种无法解析的外部符号。我刚开始按照作者的教程构建编译,最后就只有一个 Pangolin.lib,我认为这可能和作者在Cmake 中禁用的 LIBJPEG LIBPNG 等依赖库有关。因此构建编译的时候最好还是把那些依赖项都搞上,不要给Disable掉。
其他的库文件都需要自己上官网下载:
- Boost 1.74 从官网下载,采用 x64 模式只编译其中的 serialization 等几个模块就成,具体的编译命令如下:
b2.exe --toolset=msvc-14.1 architecture=x86 address-model=64 link=static --build-type=complete --with-archive --with-algorithm --with-serialization
- glew 2.1.0 上官网下载,记忆中貌似是 g2o 的依赖库。
- OpenCV 3.2.0 上官网下载,注意直接下载 Windows 版本,这样就可以直接使用,不必再构建编译。
第三方库的使用
第三方库的文件夹的架构已经如上所示,下面讲一下在 VS 2017 上的配置方法:
其实主要就是创建属性表,所有用的属性表如下
注意在挨个库配置的时候,最好弄个 Test 工程,每配置一个库,编译运行一下相关的简单的样例程序,看看有没有找不到头文件或者外部符号无法解析这样的问题,便于及时检验效果、排查错误。
属性表主要修改以下几项:
- VC++目录 - 包含目录 include 文件夹的目录,最好采用相对路径
- VC++目录 - 库目录 lib 文件夹的目录,同上
- 链接器-输入-附加依赖项 lib 文件夹下的静态链接库
- C/C++ - 预处理器 - 预处理器定义 有些库可能需要添加标明 Windows 运行环境、或者忽略某些错误的预编译指令,这个我在下面的附录中专门记录了一下,读者可参考,但具体还是要以编译时的情况为准。如有出入,还烦请读者自行添加。
- ORBSLAM3项目属性 - 调试 - 环境 在这里添加动态链接库的路径,如果运行之后还是显示缺失动态链接库的话(例如OpenCV),则将相应的动态链接库直接复制到运行目录下。比如,我这里的内容就是:
path=…/3rd/OpenCV3_2/lib;
path=…/3rd/DBoW2/lib;
path=…/3rd/g2o/lib;
源代码
源代码也来自上述那位仁兄,只不过需要将代码里面的 #include 的路径修改一下即可。
此外,g2o 库中也存在几处代码错误的报错,只需要直接上网搜索并修正即可,不是什么大问题。
注意,全程的代码编译均采用 Release x64 /MT 进行。
附录:需要额外添加的预编译器定义
ORBSLAM3项目属性中:
_CRT_SECURE_NO_WARNINGS
_WINDOWS
COMPILEDWITHC11
g2o 属性表中:
_SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING
附录:部分库文件清单
Pangolin(有几次都是 Pangolin 的链接问题,因此记录参考如下,但是不保证运行必需)
- pangolin.lib
- glew.lib
- jpeg.lib
- libglew_shared.lib
- libpng16.lib
- libpng16_static.lib
- zlib.lib
- zlibstatic.lib
- glew.dll
- libpng16.dll
- zlib.dll
最后
具体配置过程中的很多细节,我也已经有些模糊,因此,上述指南的内容,我也无法保证百分百正确——当然大部分肯定是没问题的。只是如果遇见什么新的问题,就烦请读者灵活解决。
最后再鸣谢一下网上各种指北指南的前辈,本指南也同时大量包含他们的时间。
Over.