概要
Windows上部署深度学习或C++项目,最大的障碍莫过于各种库的安装。
fast_gicp相比于官方git仓库推荐的small_gicp,多了协方差的计算,正是3D高斯抛射需要用到的内容。而使用C++进行这些计算,则需要用到Boost, Eigen以及后面计算点云用的pcl库。这里推荐一些Windows上安装C++库的方式。
- 使用vcpkg
- release版直接安装
- 从源构建
三种方式各有优劣,我会依次介绍。
整体架构流程
vcpkg
使用Clion的话可以集成vcpkg,建议是先把vcpkg仓库从官网 https://github.com/microsoft/vcpkg 拉下来
在clion中选择对应仓库的位置,不要自动下载,否则C盘会爆炸。
有些教程可能会建议大家点{ }切换至清单模式,我个人更喜欢手动模式,方便选择版本与安装
例如,这里我在列表里搜索pcl,可以选择三元组进行安装,如果装mingw版则需要所有前置库都编译mingw版,不推荐在win上这样搞。
建议让vcpkg决定,或选择x64-windows-release
pcl有大量的前置依赖,装完pcl后基本上没有其他需要手动安装的了。在cmake配置里指定对应的编译工具链即可。
如果你装的是mingw就选MinGW Makefile,如果是x64-windows就选vs
重新执行CMake即可,后续如果使用MinGW就用mingw32-make (install)编译安装,如果是MSVC就用VS打开.sln或.vcproj生成解决方案。
Release安装
这个是最推荐的方式,无论装什么库。可以省去大量前置时间,并且一般会直接添加至env。但有一个缺点就是release可能不全,比如pcl只有msvc的,没有mingw的。仓库地址:https://github.com/PointCloudLibrary/pcl
所以,如果使用这种方式安装,需要保证整套项目都是.lib或.dll,即能够给MSVC读取。但由于pcl确实是fast_gicp依赖的最后一环,完全可以使用这种方式安装。这时需要指定CMake使用的编译器为MSVC,且后续打开sln生成解决方案,会生成dll/lib文件
从源构建
这种方法不推荐新手使用,因为在构建编译的过程会出现大量的问题,尤其是依赖的递归性缺失。到最后你终于把最源头的依赖配好了,已经忘了自己需要装什么了。
pcl库从源构建的话需要boost, eigen等等大量前置库。这里为大家贴出来,可以自行尝试
Boost: https://github.com/boostorg/boost
Eigen: https://eigen.tuxfamily.org/index.php?title=Main_Page
生成库
这里由于后续使用了.lib静态库,我将SHARED改为了STATIC。
VS下生成解决方案后就是这样
到这里fast_gicp就装好了
核心问题
与Linux(gcc)相比,Windows拥有复数的C/C++编译器(MSVC, MinGW等)。而CMake先进的地方在于无论你使用什么平台,它会根据你的编译器生成对应的待编译的产物,即Makefile或.sln文件。所以使用CMake时,一定要注意编译流程中是否有不符合编译器版本的库。如果某一环中包含不符合编译器要求的库的类型,编译就会报错。