CloudCompare + VS2015 編譯指南,手把手教你配置最全插件!

CloudCompare(下面簡稱cc)編譯教程

官網教程幾乎沒什麼用,找找其他相關資料還行,github教程有點用,可以幫助小白編譯一個最簡單的、沒有其他依賴庫和插件的CloudCompare,但是我的需求比較多,還需要其他很多插件。
這種情況下,github教程也沒什麼用了,況且它已經很久沒有更新,我覺得這是一種極不負責的態度。像PDAL這種關鍵庫,涉及las文件的讀寫,只給出conda的安裝方式,但是我用conda安裝等了一天一夜,最後還是卡住不動。用vcpkg安裝可能是可以,但是因爲之前用它安裝openMVS總是失敗,對vcpkg印象不是很好。所以最後用osgeo4w試了一下,除了網速有點慢,其他方面還可以,具體看這個博主的教程
網速慢的,直接用我下載和編譯的資源,下面進入正題。

準備工作

  • 下載代碼:
git clone --recursive https://github.com/cloudcompare/CloudCompare.git

編譯源碼

如果你只想編譯一個最簡單的cc,那就直接看github教程的"Generating the project"部分就行了,所有選項保持默認即可,不用往下看。
要編譯能支持pcd、las等等文件的cc,還需要pcl、pdal,可能還需要gdal、cgal

PCL

PCL最良心,直接給了個exe,免去了很多編譯麻煩。良心鏈接,翻到最下面找到PCL-1.8.1-AllInOne-msvc2015-win64.exe

PDAL

這個庫的安裝編譯非常不友好,官網推薦用conda,很多人都是等了好久還一直卡住不動,有些人的動了,結果是出現各種錯誤。官網推薦,可能我們和他們是不同星球的……
除了conda,安裝pdal的方法還有:

  • 自己編譯。有勇氣的兄弟可以試試。教程戳這,英文的
  • vcpkg,熟悉vcpkg的朋友可以用vcpkg安裝,我用vcpkg有陰影了,就不嘗試了。
  • [推薦]osgeo4w,我用osgeo4w,參考這個博客,osgeo4w下載非常慢,我上傳了一個可以用的資源,包含PDAL的。
    在cmake裏面如下圖配置:
    在這裏插入圖片描述

有了上面兩個關鍵庫,讀寫pcd、las文件就沒有問題了,因爲我還用到了gdal和cgal,安裝也比較簡單,就一起寫這吧。
GDAL安裝教程戳這,注意版本用v2.3.2
CGAL安裝教程,先別急着百度,看github上怎麼說:Since version 5.0, CGAL is a header-only library, meaning that it is no longer needed to build CGAL libraries before it can be used
意思就是,v5.0以上的,就是個純頭文件庫,和Eigen是一樣的,不需要編譯,只需要下載下來放到個你能找到的位置就行。戳這去下載

gdal在cmake裏面如下圖配置(這裏用osgeo4w下載的gdal,而不是用自己編譯的,是爲了和pdal搭配,但是後面必須用gdal v2.3.2):
在這裏插入圖片描述
cgal在cmake裏面如下圖配置
在這裏插入圖片描述

Option和Plugin

下面是我的,測試通過的,使用當前庫能達到最多插件、功能的選項。
在這裏插入圖片描述
在這裏插入圖片描述
(plugin還有部分沒截到,就是不打勾的)
其他的一些cmake_install_prefix、編譯debug或release,還有些其他庫目錄,就自己看情況選吧。

問題彙總

坑貨boost

如果boost沒問題的,請自行忽略這部分。說到boost,我就非常氣憤,這裏尤其要指出boost這個坑貨,之前明明指定好了pcl裏面的boost,但是點Configure還是有問題。後面自己下載了一個boost v1.72(下載地址戳這,找到boost_1_72_0-msvc-14.0-64.exe),奇葩的是,第1次點Configure沒問題,但是boost的包含目錄那個變量(名稱爲BOOST_INCLUDE_DIR)沒了。這時千萬不要再點Configure,否則就會出錯,又要重新指定,直接點Generate就好了。
然後再進入vs,批生成"All Build",沒有出現問題的,跳過這部分。編譯出現問題的,估計是沒指定boost的庫目錄,在CloudCompare這個項目中指定好附加庫目錄和依賴項。
注意:用release編譯時,依賴項不要有debug版本的boost庫(含有gd後綴的是debug版本),伸手黨就直接複製下面的吧,前提是你也是boost v1.7.2和release編譯

boost_atomic-vc140-mt-x64-1_72.lib
boost_bzip2-vc140-mt-x64-1_72.lib
boost_chrono-vc140-mt-x64-1_72.lib
boost_container-vc140-mt-x64-1_72.lib
boost_context-vc140-mt-x64-1_72.lib
boost_contract-vc140-mt-x64-1_72.lib
boost_coroutine-vc140-mt-x64-1_72.lib
boost_date_time-vc140-mt-x64-1_72.lib
boost_fiber-vc140-mt-x64-1_72.lib
boost_filesystem-vc140-mt-x64-1_72.lib
boost_graph-vc140-mt-x64-1_72.lib
boost_iostreams-vc140-mt-x64-1_72.lib
boost_locale-vc140-mt-x64-1_72.lib
boost_log-vc140-mt-x64-1_72.lib
boost_log_setup-vc140-mt-x64-1_72.lib
boost_math_c99-vc140-mt-x64-1_72.lib
boost_math_c99f-vc140-mt-x64-1_72.lib
boost_math_c99l-vc140-mt-x64-1_72.lib
boost_math_tr1-vc140-mt-x64-1_72.lib
boost_math_tr1f-vc140-mt-x64-1_72.lib
boost_math_tr1l-vc140-mt-x64-1_72.lib
boost_prg_exec_monitor-vc140-mt-x64-1_72.lib
boost_program_options-vc140-mt-x64-1_72.lib
boost_python38-vc140-mt-x64-1_72.lib
boost_random-vc140-mt-x64-1_72.lib
boost_regex-vc140-mt-x64-1_72.lib
boost_serialization-vc140-mt-x64-1_72.lib
boost_stacktrace_noop-vc140-mt-x64-1_72.lib
boost_stacktrace_windbg-vc140-mt-x64-1_72.lib
boost_stacktrace_windbg_cached-vc140-mt-x64-1_72.lib
boost_system-vc140-mt-x64-1_72.lib
boost_thread-vc140-mt-x64-1_72.lib
boost_timer-vc140-mt-x64-1_72.lib
boost_type_erasure-vc140-mt-x64-1_72.lib
boost_unit_test_framework-vc140-mt-x64-1_72.lib
boost_wave-vc140-mt-x64-1_72.lib
boost_wserialization-vc140-mt-x64-1_72.lib
boost_zlib-vc140-mt-x64-1_72.lib

error C2131: 表達式的計算結果不是常數

加入了cgal後,總是這個問題。推測應該與cgal參與 cc_core_lib 的構建有關!
在這裏插入圖片描述
但是紅框裏面那個勾又必須打上,否則用不了cgal庫,會出現其他問題。
搜了很多,github上面有個issue也是一樣的問題,說什麼cgal官方並不打算解決這個問題。沒辦法,只能自己解決,稍微修改一下cc的代碼就可以編譯通過了。
解決思路,這個問題是constepr導致的,那我們就把其中一部分constexpr改成const。注意不是全部改,只改一部分,主要涉及3個文件,如下圖:
在這裏插入圖片描述
至此,編譯就可以通過了。找到你的cmake_install_prefix目錄,運行一下,發現還是讀取不了pcd和las文件,甚至還找不到boost**.dll,繼續往下看吧。

插件加載失敗,找不到boost**.dll

找不到boost**.dll,自己去把.\boost_1_72_0\lib64-msvc-14.0\目錄下的dll複製到cc的同級目錄下。
插件加載失敗,你會在cc的控制檯下發現一些紅字如下圖:
在這裏插入圖片描述
QPCL_IO_PLUGIN.dll does not seem to be a valid plugin
QPDAL_IO_PLUGIN.dll does not seem to be a valid plugin

解決方法:在PCL的安裝目錄下找到OpenNI2.dll,然後再找到之前自己安裝的gdal v2.3.2,找到gdal203.dll,均複製到cc的同級目錄下。這就是爲什麼剛剛要安裝v2.3.2的gdal

補充

怎麼才能知道exe運行缺什麼dll?有時exe自己會提示,但是有些偏不提示,我們也不是神仙,也猜不到,那就用Dependency Walker檢查一下,Dependency Walker教程戳這

應該差不多了,寫了2小時教程,還有問題朋友可以在評論區問

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章