VS2017+Qt5.12.0+PCL1.9.1開發環境配置過程記錄

VS2017+Qt5.12.0+PCL1.9.1開發環境配置過程記錄

系統環境說明

Windows 10 64位

VS2017安裝

Visual Studio 2017採用Community(社區)版本,可前往微軟官網下載:Visual Studio官方下載地址,可根據個人喜好選擇安裝路徑,本人的安裝路徑爲D:\ProgramFile\VS2017,僅供參考。

Qt5.12.0安裝

Qt5.12.0可前往Qt官網下載Qt官方下載地址,選擇的是Open Source版本。安裝路徑可依個人喜好選擇,本人的安裝路徑爲C:\Qt\Qt5.12.0,僅供參考。

在VS2017上實現搭建Qt環境

這需要在VS中,通過“工具->擴展和更新->聯機->Qt Visual Studio Tools”,安裝Qt Visual Studio Tools,並進行相關配置,網上有大量相關教程,此處不再贅述。

PCL1.9.1安裝

1.下載

Point Cloud Library (PCL)可以在其Github網站上的發佈頁獲取Windows下的安裝包,鏈接如下:https://github.com/PointCloudLibrary/pcl/releases/tag/pcl-1.9.1
根據自己的編譯器環境下載win64或者win32版本,本人下載的是64位版本的安裝文件,即PCL-1.9.1-AllInOne-msvc2017-win64.exepcl-1.9.1-pdb-msvc2017-win64.zip兩個文件。GitHub下載頁面如下面兩幅圖所示:GitHub頁面
GitHub下載頁面

2.安裝

首先雙擊文件“PCL-1.9.0-AllInOne-msvc2017-win64.exe”進行安裝,注意下面這一步建議選擇第二個“Add PCL to the system PATH for all users”,它可以自動添加系統路徑,不過也可以安裝結束後自行添加。
在這裏插入圖片描述
選擇安裝路徑時,如果選擇默認文件夾“C:\Program Files\PCL 1.9.1”,則在VS項目屬性中可以直接借用本人採用的項目屬性配置文件,如果選擇其他路徑,也可以根據後面的講解自行修改。在這裏插入圖片描述

後面的步驟建議全部採用默認設置。安裝快結束時會彈出安裝第三方庫OpenNI的提示,這裏也可以全部採用默認安裝設置,這樣後續的VS項目屬性配置中可以借用本人採用的屬性配置文件,本人的OpenNI安裝路徑如下:C:\Program Files\OpenNI2。
在這裏插入圖片描述

OpenNI安裝完之後點擊確定後,PCL也就很快安裝成功了。然後需要解壓文件“pcl-1.9.1-pdb-msvc2017-win64.zip”,將解壓得到的文件夾中的多個pdb文件(程序數據庫文件)添加到PCL安裝目錄,如:C:\Program Files\PCL 1.9.1\bin
在這裏插入圖片描述
PCL的安裝到此結束。

重新安裝VTK爲其添加Qt支持

要想使用Qt爲PCL項目製作UI,需要讓Qt能夠調用VTK生成的QVTKWidget組件,而“QVTKWidget”只有在VTK編譯時添加了Qt之後纔會生成,“PCL-1.9.1-AllInOne-msvc2017-win64.exe”安裝包裏的VTK是沒有編譯Qt支持的。要解決這個問題,可以在本地利用CMake重新編譯VTK,併爲其添加Qt支持。這一過程需要本地已經安裝好Qt。

1.下載對應版本的VTK源碼

PCL 1.9.1版本對應的VTK版本爲8.1,VTK 8.1.0版本的源碼可以通過其GitLab主頁進行下載,https://gitlab.kitware.com/vtk/vtk/tree/v8.1.0,下載頁面如下所示,選擇“Download zip”,即可得到得到源代碼壓縮文件“vtk-v8.1.0.zip”。
在這裏插入圖片描述
在合適的目錄建立3個文件夾,分別命名爲:
1.vtk_SRC:將VTK的源碼存放在此處,作爲CMake的代碼源路徑
2.vtk_build:CMake創建工程的目標路徑
3.vtk_install:編譯後版本的發佈路徑

本人將上述3個目錄建立在路徑“D:\VTK_8_1_0”下,其中vtk_SRC目錄如下圖所示:
在這裏插入圖片描述
如果採用同樣的目錄進行vtk的安裝,則在VS項目屬性中可以直接借用本人採用的屬性配置文件,如果選擇其他路徑,也可以根據後面的講解自行修改。

2.下載安裝Cmake

可以在CMake官網下載合適的Windows安裝程序,對於64位Windows系統,可以進行如下選擇:
在這裏插入圖片描述
按照默認設置安裝即可。

3.利用CMake生成VS工程

打開CMake GUI,設置源路徑爲vtk_SRC,目標路徑爲vtk_build,如下所示:
在這裏插入圖片描述
初次配置,需要選擇合適的編譯器,點擊左下角的"Configuration"按鈕,選擇編譯器爲“Visual Studio 15 2017”,編譯器平臺爲“x64”:
在這裏插入圖片描述
點擊“Add Entry”按鈕,添加CMAKE_PREFIX_PATH,類型爲“PATH”,其值設置爲QT的安裝路徑,如“C:/Qt/Qt5.12.0/5.12.0/msvc2017_64”:
在這裏插入圖片描述
點擊Add Entry,添加CMAKE_DEBUG_POSTFIX,類型爲“STRING”,其值設置爲"-gd"。用來區分debug與release版本下的dll和lib文件,不然的話創建安裝文件的時候debug與release版本,名字相同相互覆蓋。
在這裏插入圖片描述
勾選已有的“BUILD_SHARED_LIBIRARES”和“VTK_GROUP_QT”,勾選之後分別表示動態編譯VTK以及給VTK添加Qt支持。
將“CMAKE_INSTALL_PREFIX”設置爲“vtk_install”的路徑。默認的路徑在C盤的Programfiles裏面,這可能需要管理員權限才能在默認路徑下發布。
再次執行CMake配置,點擊"Configuration"按鈕,配置完成後,CMake界面顯示如下所示:
在這裏插入圖片描述
由此可見,CMake已經添加了所需的Qt相關目錄,這裏我們需要將"VTK_QT_VESION"設置爲5。如果CMake沒有找到QT5的路徑,需要再次設置。
再次配置,點擊"Configuration"按鈕,界面下方顯示"Configuring Done"則表示配置完成。這時可點擊"Generate"按鈕,生成VTK項目的Visual Studio工程。界面下方顯示“Generating done”,即可在vtk_build目錄中生成VTK項目的VS工程:
在這裏插入圖片描述

2.在VS中編譯VTK

在VS2017中打開vtk_build目錄中的“VTK.sln”文件,依次在“Debug-x64”和“Release-x64”編譯環境下執行下列操作:
在這裏插入圖片描述在這裏插入圖片描述
在“解決方案資源管理器”中選擇“ALL_BUILD”項目,鼠標右鍵單擊後,選擇“重新生成”,這一步編譯需要的時間較長。然後再選中項目“INSTALL”,鼠標右擊,依次選擇“僅用於項目->僅生成INSTALL”,這一步編譯所需時間較短。
在這裏插入圖片描述
分別在“Debug-x64”和“Release-x64”編譯環境下執行上述操作之後,即可在vtk_install目錄中得到vtk的完整安裝結果。
在這裏插入圖片描述
至此,在"…\VTK_Install\ plugins\designer"的路徑下,就可以發現文件"QVTKWidgetPlugin.dll"(Release生成)和“QVTKWidgetPlugin-gd.dll”(Debug生成)了。將Release生成的文件"QVTKWidgetPlugin.dll"複製到Qt的msvc2017_64版本的designer路徑下,如"C:\Qt\Qt5.12.0\5.12.0\msvc2017_64\plugins\designer",就可以在msvc2017_64版本的Qt Designer中添加QVTKWidget控件:
在這裏插入圖片描述

VS2017+Qt5.12.0配置PCL1.9.1

1.系統環境變量配置

要想在VS+Qt開發環境中成功使用PCL1.9.1,首先要爲PCL及其調用的第三方庫添加系統環境變量。鼠標右鍵單機“計算機”,依次選擇“屬性->高級系統設置->環境變量”,雙擊打開“系統變量”中的"path"變量:
在這裏插入圖片描述
在path環境變量中添加下圖紅色方框中的部分:
在這裏插入圖片描述
環境變量配置完成之後需要將電腦註銷一下才能生效(不用重啓)。

2.配置相關項目屬性

關於相關項目屬性的配置,本文先借助一個空項目進行介紹,下一節將以PLC官方的Qt例程爲例進行進一步的說明。
本文推薦使用新建屬性表的方式管理項目屬性,這樣可以配置多個版本,需要時直接添加對應的屬性表即可。若將屬性配置全部添加在項目自帶的屬性表中,當以後添加的版本太多或者添加的其他庫太多可能會導致配置屬性衝突等後果。
首先在VS中新建一個Qt GUI空項目。在這裏插入圖片描述

針對“Debug_x64”編譯環境,則在對應的“屬性管理器->Debug|x64"中鼠標右擊添加新項目屬性表“PropertySheet1.props”(名字可以自行更改)。在這裏插入圖片描述
對於其他編譯環境,均可以在屬性管理器中添加相應的項目屬性表,此處不再贅述。

添加包含目錄

在屬性管理器中雙擊打開項目屬性表“PropertySheet1.props”,選擇“通用屬性->VC++目錄->包含目錄”進行編輯,按照上述安裝路徑,添加右側紅色方框中的7個目錄:在這裏插入圖片描述

D:\VTK_8_1_0\vtk_install\include\vtk-8.1
C:\Program Files\OpenNI2\Include
C:\Program Files\PCL 1.9.1\3rdParty\Qhull\include
C:\Program Files\PCL 1.9.1\3rdParty\FLANN\include
C:\Program Files\PCL 1.9.1\3rdParty\Eigen\eigen3
C:\Program Files\PCL 1.9.1\3rdParty\Boost\include\boost-1_68
C:\Program Files\PCL 1.9.1\include\pcl-1.9

添加庫目錄

選擇“通用屬性->VC++目錄->庫目錄”進行編輯,添加右側紅色方框中的6個目錄:
在這裏插入圖片描述

D:\VTK_8_1_0\vtk_install\lib
C:\Program Files\PCL 1.9.1\3rdParty\Qhull\lib
C:\Program Files\OpenNI2\Lib
C:\Program Files\PCL 1.9.1\3rdParty\FLANN\lib
C:\Program Files\PCL 1.9.1\3rdParty\Boost\lib
C:\Program Files\PCL 1.9.1\lib

添加預處理器定義

選擇“通用屬性->C/C+±>預處理器->預處理器定義”進行編輯,添加右側紅色方框中的3個定義:
在這裏插入圖片描述

_CRT_SECURE_NO_WARNINGS
_SCL_SECURE_NO_WARNINGS
_SILENCE_FPOS_SEEKPOS_DEPRECATION_WARNING

設置SDL檢查

依次選擇“通用屬性->C/C+±>所有選項->SDL檢查”,將其設置爲“否(/sdl-)

在這裏插入圖片描述

添加附加依賴項

依次選擇“通用屬性->鏈接器->輸入->附加依賴項”進行“編輯”,並添加右側紅色方框中的“.lib文件”。
在這裏插入圖片描述
這裏主要是添加PCL的“.lib”文件和VTK的".lib"文件,而且Debug編譯環境和Release編譯環境各自有對應的lib文件,本人在Debug編譯環境下添加的附加依賴項如下:

pcl_common_debug.lib
pcl_features_debug.lib
pcl_filters_debug.lib
pcl_io_debug.lib
pcl_io_ply_debug.lib
pcl_kdtree_debug.lib
pcl_keypoints_debug.lib
pcl_ml_debug.lib
pcl_octree_debug.lib
pcl_outofcore_debug.lib
pcl_people_debug.lib
pcl_recognition_debug.lib
pcl_registration_debug.lib
pcl_sample_consensus_debug.lib
pcl_search_debug.lib
pcl_segmentation_debug.lib
pcl_stereo_debug.lib
pcl_surface_debug.lib
pcl_tracking_debug.lib
pcl_visualization_debug.lib
vtkalglib-8.1-gd.lib
vtkChartsCore-8.1-gd.lib
vtkCommonColor-8.1-gd.lib
vtkCommonComputationalGeometry-8.1-gd.lib
vtkCommonCore-8.1-gd.lib
vtkCommonDataModel-8.1-gd.lib
vtkCommonExecutionModel-8.1-gd.lib
vtkCommonMath-8.1-gd.lib
vtkCommonMisc-8.1-gd.lib
vtkCommonSystem-8.1-gd.lib
vtkCommonTransforms-8.1-gd.lib
vtkDICOMParser-8.1-gd.lib
vtkDomainsChemistry-8.1-gd.lib
vtkDomainsChemistryOpenGL2-8.1-gd.lib
vtkexoIIc-8.1-gd.lib
vtkexpat-8.1-gd.lib
vtkFiltersAMR-8.1-gd.lib
vtkFiltersCore-8.1-gd.lib
vtkFiltersExtraction-8.1-gd.lib
vtkFiltersFlowPaths-8.1-gd.lib
vtkFiltersGeneral-8.1-gd.lib
vtkFiltersGeneric-8.1-gd.lib
vtkFiltersGeometry-8.1-gd.lib
vtkFiltersHybrid-8.1-gd.lib
vtkFiltersHyperTree-8.1-gd.lib
vtkFiltersImaging-8.1-gd.lib
vtkFiltersModeling-8.1-gd.lib
vtkFiltersParallel-8.1-gd.lib
vtkFiltersParallelImaging-8.1-gd.lib
vtkFiltersPoints-8.1-gd.lib
vtkFiltersProgrammable-8.1-gd.lib
vtkFiltersSelection-8.1-gd.lib
vtkFiltersSMP-8.1-gd.lib
vtkFiltersSources-8.1-gd.lib
vtkFiltersStatistics-8.1-gd.lib
vtkFiltersTexture-8.1-gd.lib
vtkFiltersTopology-8.1-gd.lib
vtkFiltersVerdict-8.1-gd.lib
vtkfreetype-8.1-gd.lib
vtkGeovisCore-8.1-gd.lib
vtkgl2ps-8.1-gd.lib
vtkglew-8.1-gd.lib
vtkGUISupportQt-8.1-gd.lib
vtkGUISupportQtSQL-8.1-gd.lib
vtkhdf5-8.1-gd.lib
vtkhdf5_hl-8.1-gd.lib
vtkImagingColor-8.1-gd.lib
vtkImagingCore-8.1-gd.lib
vtkImagingFourier-8.1-gd.lib
vtkImagingGeneral-8.1-gd.lib
vtkImagingHybrid-8.1-gd.lib
vtkImagingMath-8.1-gd.lib
vtkImagingMorphological-8.1-gd.lib
vtkImagingSources-8.1-gd.lib
vtkImagingStatistics-8.1-gd.lib
vtkImagingStencil-8.1-gd.lib
vtkInfovisCore-8.1-gd.lib
vtkInfovisLayout-8.1-gd.lib
vtkInteractionImage-8.1-gd.lib
vtkInteractionStyle-8.1-gd.lib
vtkInteractionWidgets-8.1-gd.lib
vtkIOAMR-8.1-gd.lib
vtkIOCore-8.1-gd.lib
vtkIOEnSight-8.1-gd.lib
vtkIOExodus-8.1-gd.lib
vtkIOExport-8.1-gd.lib
vtkIOExportOpenGL-8.1-gd.lib
vtkIOExportOpenGL2-8.1-gd.lib
vtkIOGeometry-8.1-gd.lib
vtkIOImage-8.1-gd.lib
vtkIOImport-8.1-gd.lib
vtkIOInfovis-8.1-gd.lib
vtkIOLegacy-8.1-gd.lib
vtkIOLSDyna-8.1-gd.lib
vtkIOMINC-8.1-gd.lib
vtkIOMovie-8.1-gd.lib
vtkIONetCDF-8.1-gd.lib
vtkIOParallel-8.1-gd.lib
vtkIOParallelXML-8.1-gd.lib
vtkIOPLY-8.1-gd.lib
vtkIOSQL-8.1-gd.lib
vtkIOTecplotTable-8.1-gd.lib
vtkIOVideo-8.1-gd.lib
vtkIOXML-8.1-gd.lib
vtkIOXMLParser-8.1-gd.lib
vtkjpeg-8.1-gd.lib
vtkjsoncpp-8.1-gd.lib
vtklibharu-8.1-gd.lib
vtklibxml2-8.1-gd.lib
vtklz4-8.1-gd.lib
vtkmetaio-8.1-gd.lib
vtkNetCDF-8.1-gd.lib
vtknetcdfcpp-8.1-gd.lib
vtkoggtheora-8.1-gd.lib
vtkParallelCore-8.1-gd.lib
vtkpng-8.1-gd.lib
vtkproj4-8.1-gd.lib
vtkRenderingAnnotation-8.1-gd.lib
vtkRenderingContext2D-8.1-gd.lib
vtkRenderingContextOpenGL-8.1-gd.lib
vtkRenderingContextOpenGL2-8.1-gd.lib
vtkRenderingCore-8.1-gd.lib
vtkRenderingFreeType-8.1-gd.lib
vtkRenderingGL2PS-8.1-gd.lib
vtkRenderingGL2PSOpenGL2-8.1-gd.lib
vtkRenderingImage-8.1-gd.lib
vtkRenderingLabel-8.1-gd.lib
vtkRenderingLIC-8.1-gd.lib
vtkRenderingLOD-8.1-gd.lib
vtkRenderingOpenGL-8.1-gd.lib
vtkRenderingOpenGL2-8.1-gd.lib
vtkRenderingQt-8.1-gd.lib
vtkRenderingVolume-8.1-gd.lib
vtkRenderingVolumeOpenGL-8.1-gd.lib
vtkRenderingVolumeOpenGL2-8.1-gd.lib
vtksqlite-8.1-gd.lib
vtksys-8.1-gd.lib
vtkTestingGenericBridge-8.1-gd.lib
vtkTestingIOSQL-8.1-gd.lib
vtkTestingRendering-8.1-gd.lib
vtktiff-8.1-gd.lib
vtkverdict-8.1-gd.lib
vtkViewsContext2D-8.1-gd.lib
vtkViewsCore-8.1-gd.lib
vtkViewsInfovis-8.1-gd.lib
vtkViewsQt-8.1-gd.lib
vtkzlib-8.1-gd.lib
QVTKWidgetPlugin-gd.lib

至此,開發環境配置全部完成。

PCL官方例程

PCL官方例程是在CMake下構建VS項目,然後用VS編譯。現在我將官方給出的例程PCL Visualizer in Qt with CMake直接用VS進行構建。程序效果如下:
在這裏插入圖片描述
項目完整源代碼可前往GitHub下載,其中也包含了本人的項目屬性表文件"PropertySheet1.props":https://github.com/xiaolong361/PCL_Visualizer

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