VS2017 + Qt5 + CloudCompare2.11.0 编译

本文介绍如何编译CloudCompare 2.11.0版本,并详细记录了配置CMake、使用VS2017进行编译的过程。同时分享了解决常见编译错误的方法,以及正确配置动态链接库和插件路径,确保软件能够正常读取LAS和pcd格式点云数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(一)资源准备

(1)CloudCompare2.11.0源码
源码下载地址:https://github.com/CloudCompare/CloudCompare/releases

(2)PDAL或者laslib
使得CC支持读写LAS格式的点云文件,如果没有PDAL也可以选择编译Laslib,后者支持Las1.3和Las1.4格式。

(3)PCL-1.9.1
使得CC支持读写pcd格式的点云文件,也方便在后续二次开发过程中调用PCL库。

(二)CMake配置

(1)设置路径
CC源码资源路径:E:/ccProject/CloudCompare-2.11.0-master
CC项目生成路径:E:/ccProject/CC-Build
666
(2)点击左下角Configure按钮,配置编译环境
开发环境:VS2017
开发平台:x64
点击Finish按钮,如果没问题的话,CMake控制台最后显示“Configuring done”。
在这里插入图片描述
在这里插入图片描述

(3)设置相关项目的Value值

1)Qt5路径设置
Ungrouped Entries >>> QT5_ROOT_PATH >>> C:/OSGeo4W64/apps/Qt5

2)安装PDAL和PCL插件
(勾选)PLUGIN >>> PLUGIN_IO_PDAL 将PDAL以插件的形式安装。
(勾选)PLUGIN >>> PLUGIN_STANDARD_QPCL将PCL库以插件的形式安装。
如果你不用PDAL而选择laslib库来读写点云,则勾选 PLUGIN >>> PLUGIN_IO_QLAS_FWF

3)多线程OpenMP
OPTION >>> OPTION_OPENMP_BUILD(勾选)支持多线程构建。
此时,点击“Configure”按钮再次进行配置,系统会自动搜索到与PCL库关联的文件路径(Boost、FLANN、OPENNI2、PCL、QHULL),但仍然会提示缺少PDAL库。

4)PDAL路径设置
Ungrouped Entries >>> PDAL_DIR>>> C:/OSGeo4W64/lib/pdal/cmake
此时,再次点击“Configure”按钮进行配置,不出意外控制台显示“Configuring done”,表示配置成功。

5)CMake配置构建类型
CMake >>> CMAKE_CONFIGURATION_TYPES >>> Release
把“Debug”和“RelWithDebInfo ”这两个类型删除,保留Release,这样做的目的在于可以极大缩短CC编译时间!

最终各项配置图如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(4)点击“Generator”按钮,生成解决方案(*.sln)
在这里插入图片描述

(三)VS2017编译CC源码

(1)解决方案配置设为“Release模式”——> 右击“ALL_BUILD”——>重新生成
在这里插入图片描述

(2)编译错误
编译QPDAL_IO_PLUGIN的时候发生错误,在LasFilter.cpp的canSave函数中(第152行)提示:“error C2666: operator == 12个重载有相似的转换”。

解决方法:考虑到“CC_CLASS_ENUM”的类型是“int64_t”,而“CC_TYPES::POINT_CLOUD”是普通枚举类型,所以需要对后者进行数据类型转换,使两者类型一致即可。因为枚举类型本质上也是整型!!!
在这里插入图片描述

(3)设置相关动态链接库

将以下3个dll文件复制到CloudCompare.exe同级目录(项目生成目录\qCC\Release\)
CC项目生成目录\CC\Release\CC_CORE_LIB.dll
CC项目生成目录\libs\qCC_io\Release\QCC_IO_LIB.dll
CC项目生成目录\libs\qCC_db\Release\QCC_DB_LIB.dll

将以下3个文件夹复制到CloudCompare.exe同级目录
Qt5安装目录\plugins\imageformats
Qt5安装目录\plugins\platforms
Qt5安装目录\plugins\sqldrivers

在CloudCompare.exe同级目录下新建一个名为“plugins”的文件夹(必须这样命名),并将以下3个dll文件复制到plugins文件夹内
CC项目生成目录\plugins\core\Standard\qPCL\Release\QPCL_PLUGIN.dll
CC项目生成目录\plugins\core\Standard\qPCL\PclIO\Release\QPCL_IO_PLUGIN.dll
CC项目生成目录\plugins\core\IO\qPDALIO\Release\QPDAL_IO_PLUGIN.dll

将“CloudCompare”设为启动项,F5运行。
在这里插入图片描述
下图是CC中的插件管理模块窗口,不难发现,CC会从多个指定路径下寻找插件,如果插件被识别到,会在左边列表中显示。
在这里插入图片描述
(4)遇到的问题

即使编译了PDAL库,还是不能加载las数据。
在这里插入图片描述

在控制台日志中发现CC无法识别PDAL插件,提示“QPDAL_IO_PLUGIN.dll does not seem to be a valid plugin
在这里插入图片描述
解决方法:将pdal_util.dll和pdalcpp.dll所在的文件夹路径添加到计算机的系统变量Path中去,然后重启计算机即可。
在这里插入图片描述

运行后终于可以加载LAS和pcd格式的点云了!
在这里插入图片描述

后续本人在编译CC-2.11.3版本时发现按照上述流程编译出来的CC仍然无法识别LAS格式的点云。经过一番研究之后才发现在CMake的时候必须勾选GDAL选项,然后把GDAL的动态链接库gdal203.dll(一定要是203版本的!!!)复制到CloudCompare.exe的同级目录下,其他步骤均同上不变

### CloudCompare 软件崩溃解决方案 对于CloudCompare软件可能遇到的崩溃问题,可以采取一系列措施来诊断并解决问题。首先,确保使用的编译环境配置正确无误是非常重要的。针对特定版本的CloudCompare,在编译过程中可能会遭遇各种兼容性和依赖项方面的问题。 #### 1. 环境设置验证 确认当前开发环境中所使用的工具链版本与目标CloudCompare版本相匹配。例如,当尝试编译CloudCompare2.11.0时,建议参考VS2010 + Qt4.8 + CMake3.14 或者 VS2017 + Qt5.9 + CMake3.14 的组合来进行构建工作[^1]。这有助于减少由于不兼容引起的潜在错误源。 #### 2. 修改CMakeLists.txt 文件 如果是在较新版本的CMake环境下进行编译,则需要注意调整`CloudCompare-master/CMakeLists.txt`中的条件语句逻辑。具体而言,应将第70行由`else( APPLE )`更改为`elseif( APPLE )`以适应现代CMake语法的要求[^2]。此更改能够防止因条件判断不当而导致的部分平台上的编译失败或运行不稳定情况发生。 #### 3. 错误日志分析 每当程序出现异常终止时,都会生成相应的错误报告或日志记录。通过仔细审查这些信息可以帮助定位具体的故障位置以及其背后的原因。常见的做法是从标准输出流、调试器断点处或是专门的日志文件里收集线索。 #### 4. 更新第三方库 随着时间和技术的发展,许多外部依赖也会不断更新迭代。定期检查并升级至最新稳定版的Qt、Boost等常用组件往往能有效修复已知漏洞和性能瓶颈,从而提高整体系统的健壮性。 #### 5. 社区支持求助 最后但同样重要的是利用官方论坛或其他在线交流渠道寻求帮助和支持。其他开发者或许已经遇到了相似的情况,并分享了解决办法;积极参与讨论不仅有利于快速找到答案,还能积累宝贵的经验教训。 ```cpp // 示例:如何捕获未处理异常以便更好地理解崩溃原因 #include <iostream> #include <exception> void setupUnhandledExceptionHook() { std::set_terminate([](){ try{ throw; } catch(const std::exception& e){ std::cerr << "Terminating due to uncaught exception: " << e.what() << '\n'; } }); } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值