其实LZ已经不再是两年前的Linux小白了,至于为什么要在windows下配置环境,是因为LZ在Linux下已经成功编译成功了ROSEFusion,但运行时一直报错Frame could not be processed,在github下的issue里面查询得知可能是CUDA版本问题。另外,作者提供的docker的nvidia驱动版本和LZ的显卡也不兼容,image无法创建container。LZ实在不想重装cuda,再编译opencv-cuda了,转念一想在windows之前有编译好的opencv-cuda,何不尝试一下,最终居然成功了也是意料之外。
环境配置如下:
win10+vs2019+cuda11.1+opencv4.5.5(with cuda support)+eigen-3.4.0+pangolin0.6
其中cuda和eigen安装比较容易,opencv-cuda需要自己编译,这里是LZ之前编译好的(VS2019+CUDA11.1 Release x64编译的OpenCV4.5.5 带CUDA和contrib模块),pangolin的安装需要事先安装git,安装方法见:https://blog.csdn.net/qq_38589460/article/details/117934776。
刚开始LZ尝试采用cmake构建vs2019的工程,几经波折生成.sln文件之后vs编译发现由于Linux文件编码和windows不同,导致一堆文件编译乱码,还有头文件找不到等一堆问题。LZ按网上utf-8转gbk编码格式尝试了,也没有成功,没办法只能另辟蹊径了。
新建CUDA11 Runtime项目:
将ROSEFusion各级目录下的.h文件、.cpp文件、.cu文件都放在同级目录下,如下图所示:
配置第三方库eigen、opencv、pangolin的属性表,其实如果注释掉pangolin可视化的部分代码还是比较容易编过的,下面的步骤就可以略过了。但是LZ又怎么可能轻易放弃呢?
报错1:
pangolin.lib(display.obj) : error LNK2001: 无法解析的外部符号 __imp_glEnableClientState
pangolin.lib(gldraw.obj) : error LNK2001: 无法解析的外部符号 __imp_glEnableClientState
main.obj : error LNK2001: 无法解析的外部符号 __imp_glClear
…
解决方法:在链接器中添加opengl32.lib
报错2:
pangolin.lib(image_io_zstd.obj) : error LNK2001: 无法解析的外部符号 ZSTD_isError
pangolin.lib(image_io_zstd.obj) : error LNK2001: 无法解析的外部符号 ZSTD_getErrorName
pangolin.lib(image_io_zstd.obj) : error LNK2001: 无法解析的外部符号 ZSTD_createCStream
…
解决方法:在链接器中添加zstd.lib
报错3:
pangolin.lib(uvc_mediafoundation.obj) : error LNK2001: 无法解析的外部符号 MFStartup
pangolin.lib(uvc_mediafoundation.obj) : error LNK2001: 无法解析的外部符号 MFShutdown
pangolin.lib(uvc_mediafoundation.obj) : error LNK2001: 无法解析的外部符号 MFCreateAttributes
…
解决方法:在链接器中添加mf.lib、mfplat.lib、mfreadwrite.lib、mfuuid.lib
报错4:
pangolin.lib(uvc_mediafoundation.obj) : error LNK2001: 无法解析的外部符号 IID_ICreateDevEnum
pangolin.lib(uvc_mediafoundation.obj) : error LNK2001: 无法解析的外部符号 IID_IBaseFilter
解决方法:在链接器中添加strmiids.lib
最终编译成功!
.\ROSEFusion.exe .\example_camera.yaml .\example_data.yaml .\example_controller.yaml
然后打开cmd或powershell输入上面的命令执行编译得到的exe文件,可能还会少一些dll文件例如libpng16.dll,用everything搜索工具在电脑中查找并把复制到exe文件的同级目录即可。运行效果如下,非常完美!
最终还是声明一下,像深度学习、三维重建、slam这些方向最好还是使用Linux系统,一些环境和包的配置会容易很多,此文仅做参考。