简介
???由于工作需要对点云进行处理,上网找了一些点云处理工具,最终选择用CloudCompare(http://www.cloudcompare.org/)这款软件。由于本人用的m1芯片的macos,而且平时处理点云使用的pcl库,点云一般都保存为.pcd格式,但是直接从官网下dmg安装后发现不能打开pcd格式的点云文件。可以看到官方提供的dmg安装包并不包含pcl的插件,ccViewer也没有提供pcd格式文件的查看。于是只能自己动手从源码编译了!
源码编译
1. 下载源码
? ??cloudcompare源码地址:https://github.com/CloudCompare/CloudCompare
? 熟悉的git clone将源码保存到本地了。
2. 编译
2.1 尝试编译
? ??得到源码后肯定是想办法编译了,简单粗暴,在源码仓库的主目录下
mkdir build
cd build
cmake ..
???这时应该会报很多错误,笔者也忘记具体解决了多少个错误才编译成功,从git更改的文件来复现一波。
2.2 CMakeLists修改
??大部分的问题都是出在找不到头文件找不到库这一类的东西上。
-
问题1:ccMath.h头文件找不到。 ???可以发现CloudCompare中很多文件包含了ccMath.h的文件,但是整个仓库都搜不到这个头文件。其实这个文件包含在他们另一个工程CCCoreLib中(源码地址:https://github.com/CloudCompare/CCCoreLib)。 ???对于这个工程的编译没什么问题,就是git clone,mkdir build, cd build, cmake …, make -j4这么一套下来就编译成功了。不过笔者在这里对CMakeLists.txt文件稍作了修改 set(CMAKE_BUILD_TYPE "release") # 此行添加在cmake_minimum_required( VERSION 3.10 ) 之后
option( CCCORELIB_SCALAR_DOUBLE
"Define ScalarType as double (instead of float)"
ON
) # 此行的参数默认是OFF,笔者将其改为了ON,浮点数用double(精度更高嚒)
??这里笔者就没make install了,因为m1的磁盘权限管理比较坑,往往会因为创建不了文件夹导致失败。反正编译的库和头文件已经得到了。库文件为build下的libCCCoreLib.dylib,头文件目录就是源码主目录下的include以及build/export(编译完在这里悄悄生成了一个头文件 - 。-)。 ??接下来继续回到CloudCompare这个工程,在主目录下的CMakeLists.txt中做以下修改:
# 以下行添加在project( CloudCompareProjects )后
set(CMAKE_BUILD_TYPE "release")
set(CCCORELIB_INCLUDE_DIR /Users/machineboy/repo/CCCoreLib/include ~/repo/CCCoreLib/build/exports) # 这里改为自己电脑上对应的路径
link_directories( ~/repo/CCCoreLib/build)
include_directories(${CCCORELIB_INCLUDE_DIR})
? ??至此,问题1解决,主要是对CCCoreLib的依赖问题。
??打开cloudcompare工程主目录下的CMakeLists.txt,同样在project语句后添加以下宏定义:
add_definitions(-DCC_CORE_LIB_USES_DOUBLE)
??还记得笔者在问题1中修改的的以下语句吧
option( CCCORELIB_SCALAR_DOUBLE
"Define ScalarType as double (instead of float)"
ON
) # 此行的参数默认是OFF,笔者将其改为了ON,浮点数用double(精度更高嚒)
??如果这里使用默认参数OFF,则上述宏定义语句要变成
add_definitions(-DCC_CORE_LIB_USES_FLOAT)
-
问题3:找不到vtkxxx头文件(好像是这个吧,记不清楚了)
??同样在CloudCompare主目录的CmakeLists.txt中添加头文件目录
include_directories(/opt/homebrew/Cellar/qt@5/5.15.2/lib/QtConcurrent.framework/Versions/5/Headers/) #改为自己电脑上的路径
-
问题4: extern/CCCoreLib下找不到CMakeLists.txt文件
??注释掉lib/qCC_db的cmakelists.txt中的add_subdirectory( extern/CCCoreLib EXCLUDE_FROM_ALL )
??将plugins/core/Standard/qPCL/CMakeLists.txt中的安装选项打开,要安装其他插件同理。
# option( PLUGIN_STANDARD_QPCL "Install qPCL plugin" OFF )
option( PLUGIN_STANDARD_QPCL "Install qPCL plugin" ON )
2.3 完成编译
??这时候安装2.1的步骤直接编译应该就能编译成功了,虽然中间会有一大串警告。这时候在build/qCC文件夹下会有CloudCompare.app这个程序,打开,开心地拖进去pcd文件,纳尼?还是识别不了pcd格式。
??不要慌,打开build/ccPlugins文件夹,会发现其中有几个动态库,全部复制。然后进入CloudCompare.app/Contents,创建一个文件夹名称叫PlugIns,进入文件夹,将刚刚复制的动态库粘贴到这。
??大功告成,重新打开CloudCompare.app程序,拖入pcd文件,成功读取。
|