CloudCompare 编译

引言

最近需要将自己做的算法以插件的形式集成在CloudCompare上,因此涉及到对CC的编译。这里就将完整过程进行记录。笔者是在windows平台使用,编译环境为:win7 64位系统 VS2013、PCL1.8 X64和X86 、Qt 5.6,因为要编译32位和64位的软件,故所有库都具有32和64两种类型。

CC

CC的官网:http://www.cloudcompare.org/
CC在Github:https://github.com/cloudcompare/cloudcompare
CC的编译:https://github.com/CloudCompare/CloudCompare/blob/master/BUILD.md

上面就是最重要的3个网站,从这里可以找到所有和编译相关的信息。博客中大部分内容直接翻译自上述3个网站中内容。

CC介绍

CloudCompare是一个三维点云(和三角网格)处理软件。 它最初设计用于比较两个三维点云(例如用激光扫描仪获得的点云)之间或点云与三角网格之间的比较。 这也是为什么叫做CloudCompare了。CC支持海量点云显示与加载,这也是我选择将自己的算法集成在CC上的一个重要原因。

编译准备

  1. 下载CC源码
  2. 安装CMake,这里我安装的是3.10版本
  3. 安装Qt,如果你不了解Qt编译CC也没有多少意义,劝你就此打住。因为做软件开发,我电脑里同时安装了Qt X86和X64版本。
  4. 确定你的VS是2013版本,其他版本请移步。

编译过程

因为写这篇博客前,我已经编译了64位版本的CC,这里例子是编译32位的CC,过程都是一样的,不用纠结。
(1)打开CMake GUI
Where is the source code:D:/CC/trunk 这是CC的源代码路径,你下载的CC名字不叫做trunk,这里是我自己改的。
Where is build the binaries:D:/CC/buildX86 这是的路径是生成VS工程的路径


CloudCompare 编译_第1张图片

(2)Configure

CloudCompare 编译_第2张图片
选择编译器,如果是64位就选择x64

等待CMake调试完成,提示错误。
设置 QT5_ROOT_PATH变量,例如:C:\Qt\Qt5.6.0X86\5.6\msvc2013
再次Configure,直到出现Configuring done。


CloudCompare 编译_第3张图片

(3)Generate
在Generate之前,你可以选择一些普通选项,丰富CC的功能,如果不需要这些功能大可以不必选择,因为选择的越多出现的问题越多!
OPTION_BUILD_CC_VIEWER: whether or not to build the ccViewer side project (ON by default)
OPTION_SUPPORT_MAC_PDMS_FORMAT:$ to add support for PDMS .mac scripts (CAD format)
OPTION_USE_DXFLIB: to add support for DXF files in CloudCompare/ccViewer with dxflib - see below
OPTION_USE_FBX_SDK: to add support for FBX files in CloudCompare/ccViewer with the official FBX SDK - see below
OPTION_USE_GDAL: to add support for a lot of raster files in CloudCompare/ccViewer with GDAL libray - see below
OPTION_USE_LIBE57: to add support for E57 files in CloudCompare/ccViewer with libE57 - see below
OPTION_USE_LIBLAS: to add support for LAS files in CloudCompare/ccViewer with libLAS - see below
OPTION_USE_SHAPE_LIB:to add support for SHP files in CloudCompare/ccViewer

仅windows平台可进行的选择
OPTION_MP_BUILD: for Visual Studio only (multi-process build –> much faster but uses a lot of CPU power)这个可以加快构建速度,我果断选择了此项
OPTION_SUPPORT_3D_CONNEXION_DEVICES: for 3D mouses handling
OPTION_USE_OCULUS_SDK: to add support for the Oculus Rift SDK in CloudCompare/ccViewer (work in progress)
OPTION_USE_VISUAL_LEAK_DETECTOR: to use the Visual Leak Detector library for MSVC (http://vld.codeplex.com/)

在Generate前,这里只选择了 OPTIONMPBUILD ,其他的都默认,例如liblas库和PCL我目前还用不到,所以暂时不添加。

Generating done出现后,说明离成功更近一步了,虽然出现很多警告不用管。


CloudCompare 编译_第4张图片

(4)Open Project


CloudCompare 编译_第5张图片
如果你需要Release版本的,就把Debug换成Release即可。然后Ctrl+F5 其他开始方式也行,条条大路通罗马。

到这里就不要开心的太早了,因为马上就会出现错误。而且是很有趣的错误。
经过几分钟的忐忑煎熬,错误如期而至。我错了,原来只有X64的工程会出现那个错误,X86竟然一次编译通过。出于认真负责的态度,我还是把X64遇到的错误以及解决方法贴出来,已帮助更多的人。
X64编译时遇到错误
中文版错误

error C2440: “初始化”: 无法从“initializer-list”转换为“QList”
Error LNK1104:不能打开文件 '...\libs\qcc_io\Debug\QCC_IO_LIBd.lib'

英文版错误

Error C2440:'initializing': cannot convert from initializer list to QList  in AsciiOpenDlg.cpp
And
Error LNK1104:cannot open file '...\libs\qcc_io\Debug\QCC_IO_LIBd.lib'

解决方法,定位错误,修改错误代码:

//const QList separators{ QChar(' '),
    //                              QChar('\t'),
    //                              QChar(','),
    //                              QChar(';'),
                                 };
    const QList separators = QList() << QChar(' ') << QChar('\t') << QChar(',') << QChar(';');

出现下面这个就说明你已经编译成功了,开始享受成果吧。


CloudCompare 编译_第6张图片
成功

(5)测试
打开
D:\CC\buildX86\qCC\Release或者D:\CC\buildX86\qCC\Debug下的CC软件。
到这里你肯定还是会遇到不少问题,不过我相信对你来说已经不是任何问题。


CloudCompare 编译_第7张图片
这里用的x64的CC,打开的Las数据,两千万的点云数据量,流畅浏览毫无卡顿。

总结

突然发现CC好像比以前更好编译了,也许是我选择的附加功能少的缘故。下次将会测试自己的插件,敬请期待。

你可能感兴趣的:(PCL点云库)