PCL 1.8.0+VS 2015+CMake的安裝配置詳細教程
看了很多很多部落格,配了刪,刪了配,機房win7電腦足足配置了兩天,但在自己電腦win10配置又遇到了別的問題,最後又安裝cmake,自己的電腦又搞了兩天。看了網上的部落格,結合自己的配置過程,希望寫個更整體、更詳細的配置說明,來幫助更多人。有的部落格寫的很詳細的,我就只補充些我遇到的問題。為了更方便安裝配置,我把我安裝的這些軟體版本供大家下載:
百度雲下載連結:https://pan.baidu.com/s/1f24uAR3cFiWPb_Vk8jiZCw 密碼:qnk1
檔案截圖:
本文所有的軟體都安裝在了D盤
1.安裝VS2015
VS2015有三個版本,社群版足夠我們使用,這裡我選擇的是社群版。安裝教程下面的部落格十分詳細,只不過要注意一個評論
勾選 vs 2015 更新3 ,在我win10電腦上沒有勾選,結果建立不了專案!重新安裝時勾選之後沒這個情況了。
注意事項:這個社群版是免費的,但是剛開始使用30天試用期,試用期一過就得登入賬戶才能繼續免費使用。
2.安裝PCL-1.8.0
首先說明一下PCL的安裝路徑問題,有的教程選擇預設安裝在C盤,說cmake只在C盤搜尋PCL庫。這個我不太清楚,但是按在系統盤C盤也有一些問題,部落格中沒有提及,耗費了我很長時間。如果安裝在C盤,cmake一定要以管理員的身份執行,不然在Cmake建立專案時會讀寫檔案失敗。如果安裝在別的盤,就正常開啟就行了。測試cmake時有一些紅色字型的警告:(如下圖,只擷取部分),這種情況並不影響最後測試成功。(親測,機房電腦安裝在C盤;自己電腦安裝在D盤)
還有就是登錄檔中兩個檔案PCLRelease.props和PCLDebug.props,不同版本的PCL會有不同,配置的前 自己注意一下,裡邊的內容是PCL-3rd裡邊所有資料夾對應的LIB庫,不對應會報錯。
配置連結器-輸入項-附加依賴庫的檔案,可參考,同樣是看PCL-3rd裡邊所有資料夾對應的LIB庫,不對應會報錯,我百度雲提供的都是對應著的。
瞭解pcl安裝在哪個盤對別的軟體影響之後,開始安裝PCL吧。
安裝步驟
1.點選PCL-1.8.0-AllInOne-msvc2015-win64.exe安裝,可以預設也可以自己選擇安裝路徑(影響上面已經說了),如本文所選擇的路徑為預設安裝路徑D:\;之後就點下一步或安裝就行了。
2.在安裝過程中,OpenNI2在安裝時會彈出介面,安裝在你安裝PCL的資料夾PCL 1.8.0\3rdParty\OpenNI2下,例如本文是選擇目錄D:\PCL 1.8.0\3rdParty\OpenNI2;之後就點下一步或安裝就行了。
3.等待一段時間,則安裝完成。
4.將下載的資料夾pcl-1.8.0-pdb-msvc2015-win64裡的東西,全部貼上到安裝路徑D:\PCL 1.8.0\bin資料夾下。
注意事項:1、在安裝點選“我接收(I)”之後彈出來的對話方塊中一定要選擇第二項AddPCL to the system PATH for all users:
2、在自己win10電腦安裝時,無論安裝在C盤還是D盤都會提示path too long installer unable to modify path警告 (如下圖,網上找的),但是機房win7電腦沒有這個情況。就目前來看,這個還沒有什麼影響。
配置環境
win10是找到 控制面板—》系統—》高階系統設定—》環境變數;在系統變數中找到Path新增上以下路徑
D:\PCL 1.8.0\bin;
D:\PCL 1.8.0\3rdParty\FLANN\bin;
D:\PCL 1.8.0\3rdParty\Qhull\bin;
D:\PCL 1.8.0\3rdParty\OpenNI2\Tools;
D:\PCL 1.8.0\3rdParty\VTK\bin
這樣就安裝完畢了。
在VS 2015中配置PCL
1.首先開啟VS 2015,建立新的win32控制檯工程,建好後將平臺改成X64,將程式碼貼上進去
#include<pcl/visualization/cloud_viewer.h>
#include<iostream>//標準C++庫中的輸入輸出類相關標頭檔案。
#include<pcl/io/io.h>
#include<pcl/io/pcd_io.h>//pcd 讀寫類相關的標頭檔案。
#include<pcl/io/ply_io.h>
#include<pcl/point_types.h> //PCL中支援的點型別標頭檔案。
int user_data;
using std::cout;
void viewerOneOff(pcl::visualization::PCLVisualizer& viewer) {
viewer.setBackgroundColor(1.0, 0.5, 1.0); //設定背景顏色
}
int main() {
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
char strfilepath[256] = "rabbit.pcd";
if (-1 == pcl::io::loadPCDFile(strfilepath, *cloud)) {
cout << "error input!" << endl;
return -1;
}
cout << cloud->points.size() << endl;
pcl::visualization::CloudViewer viewer("Cloud Viewer"); //建立viewer物件
viewer.showCloud(cloud);
viewer.runOnVisualizationThreadOnce(viewerOneOff);
system("pause");
return 0;
}
2.在解決方案資源管理器中右擊專案名稱點選屬性
3.在彈出框中選中VC++目錄,新增包含目錄和庫目錄。
4.點選包含目錄,下拉箭頭—》編輯,新增檔案路徑(看你把PCl安在哪了)
完成後點選確定。
5.點選庫目錄,下拉箭頭—》編輯,新增檔案路徑
完成後點選確定。
6.點選連結器—》輸入—》附加依賴項,點選下拉箭頭—》編輯,新增下列檔案(可以下面貼上複製,也可以在Debug附加依賴項.txt中複製)。注意:這是在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
libboost_atomic-vc140-mt-gd-1_61.lib
libboost_chrono-vc140-mt-gd-1_61.lib
libboost_container-vc140-mt-gd-1_61.lib
libboost_context-vc140-mt-gd-1_61.lib
libboost_coroutine-vc140-mt-gd-1_61.lib
libboost_date_time-vc140-mt-gd-1_61.lib
libboost_exception-vc140-mt-gd-1_61.lib
libboost_filesystem-vc140-mt-gd-1_61.lib
libboost_graph-vc140-mt-gd-1_61.lib
libboost_iostreams-vc140-mt-gd-1_61.lib
libboost_locale-vc140-mt-gd-1_61.lib
libboost_log-vc140-mt-gd-1_61.lib
libboost_log_setup-vc140-mt-gd-1_61.lib
libboost_math_c99-vc140-mt-gd-1_61.lib
libboost_math_c99f-vc140-mt-gd-1_61.lib
libboost_math_c99l-vc140-mt-gd-1_61.lib
libboost_math_tr1-vc140-mt-gd-1_61.lib
libboost_math_tr1f-vc140-mt-gd-1_61.lib
libboost_math_tr1l-vc140-mt-gd-1_61.lib
libboost_mpi-vc140-mt-gd-1_61.lib
libboost_prg_exec_monitor-vc140-mt-gd-1_61.lib
libboost_program_options-vc140-mt-gd-1_61.lib
libboost_random-vc140-mt-gd-1_61.lib
libboost_regex-vc140-mt-gd-1_61.lib
libboost_serialization-vc140-mt-gd-1_61.lib
libboost_signals-vc140-mt-gd-1_61.lib
libboost_system-vc140-mt-gd-1_61.lib
libboost_test_exec_monitor-vc140-mt-gd-1_61.lib
libboost_thread-vc140-mt-gd-1_61.lib
libboost_timer-vc140-mt-gd-1_61.lib
libboost_type_erasure-vc140-mt-gd-1_61.lib
libboost_unit_test_framework-vc140-mt-gd-1_61.lib
libboost_wave-vc140-mt-gd-1_61.lib
libboost_wserialization-vc140-mt-gd-1_61.lib
vtkzlib-7.0-gd.lib
vtkViewsContext2D-7.0-gd.lib
vtkhdf5_hl-7.0-gd.lib
vtkFiltersProgrammable-7.0-gd.lib
vtkIOMovie-7.0-gd.lib
vtkexpat-7.0-gd.lib
vtkRenderingLOD-7.0-gd.lib
vtkIOPLY-7.0-gd.lib
vtkpng-7.0-gd.lib
vtkIOVideo-7.0-gd.lib
vtkRenderingImage-7.0-gd.lib
vtkFiltersVerdict-7.0-gd.lib
vtkNetCDF_cxx-7.0-gd.lib
vtkjpeg-7.0-gd.lib
vtkInteractionImage-7.0-gd.lib
vtkverdict-7.0-gd.lib
vtkoggtheora-7.0-gd.lib
vtkImagingStatistics-7.0-gd.lib
vtkCommonSystem-7.0-gd.lib
vtkFiltersParallelImaging-7.0-gd.lib
vtkFiltersTexture-7.0-gd.lib
vtkCommonMisc-7.0-gd.lib
vtkCommonMath-7.0-gd.lib
vtkFiltersSelection-7.0-gd.lib
vtkImagingFourier-7.0-gd.lib
vtkIOXMLParser-7.0-gd.lib
vtkproj4-7.0-gd.lib
vtkalglib-7.0-gd.lib
vtktiff-7.0-gd.lib
vtksqlite-7.0-gd.lib
vtkImagingSources-7.0-gd.lib
vtkCommonTransforms-7.0-gd.lib
vtkImagingMath-7.0-gd.lib
vtkFiltersGeneric-7.0-gd.lib
vtkexoIIc-7.0-gd.lib
vtkfreetype-7.0-gd.lib
vtkImagingColor-7.0-gd.lib
vtkNetCDF-7.0-gd.lib
vtkFiltersImaging-7.0-gd.lib
vtkFiltersHyperTree-7.0-gd.lib
vtkImagingMorphological-7.0-gd.lib
vtkImagingStencil-7.0-gd.lib
vtkRenderingFreeType-7.0-gd.lib
vtkCommonColor-7.0-gd.lib
vtkjsoncpp-7.0-gd.lib
vtkRenderingContext2D-7.0-gd.lib
vtkFiltersAMR-7.0-gd.lib
vtkRenderingContextOpenGL-7.0-gd.lib
vtkIOParallelXML-7.0-gd.lib
vtkViewsCore-7.0-gd.lib
vtkImagingHybrid-7.0-gd.lib
vtkIOExport-7.0-gd.lib
vtkRenderingVolumeOpenGL-7.0-gd.lib
vtkIOImport-7.0-gd.lib
vtkDomainsChemistry-7.0-gd.lib
vtkInteractionStyle-7.0-gd.lib
vtkCommonComputationalGeometry-7.0-gd.lib
vtkDICOMParser-7.0-gd.lib
vtklibxml2-7.0-gd.lib
vtkIOMINC-7.0-gd.lib
vtkIOSQL-7.0-gd.lib
vtkFiltersModeling-7.0-gd.lib
vtkParallelCore-7.0-gd.lib
vtkIOAMR-7.0-gd.lib
vtkGeovisCore-7.0-gd.lib
vtksys-7.0-gd.lib
vtkIOEnSight-7.0-gd.lib
vtkImagingGeneral-7.0-gd.lib
vtkFiltersFlowPaths-7.0-gd.lib
vtkIOLSDyna-7.0-gd.lib
vtkFiltersSMP-7.0-gd.lib
vtkIOParallel-7.0-gd.lib
vtkFiltersGeometry-7.0-gd.lib
vtkInfovisLayout-7.0-gd.lib
vtkIOCore-7.0-gd.lib
vtkFiltersSources-7.0-gd.lib
vtkIOLegacy-7.0-gd.lib
vtkFiltersHybrid-7.0-gd.lib
vtkIONetCDF-7.0-gd.lib
vtkFiltersExtraction-7.0-gd.lib
vtkFiltersParallel-7.0-gd.lib
vtkRenderingLabel-7.0-gd.lib
vtkIOInfovis-7.0-gd.lib
vtkRenderingAnnotation-7.0-gd.lib
vtkImagingCore-7.0-gd.lib
vtkCommonExecutionModel-7.0-gd.lib
vtkhdf5-7.0-gd.lib
vtkViewsInfovis-7.0-gd.lib
vtkIOGeometry-7.0-gd.lib
vtkmetaio-7.0-gd.lib
vtkIOImage-7.0-gd.lib
vtkIOXML-7.0-gd.lib
vtkIOExodus-7.0-gd.lib
vtkRenderingVolume-7.0-gd.lib
vtkChartsCore-7.0-gd.lib
vtkFiltersStatistics-7.0-gd.lib
vtkInfovisCore-7.0-gd.lib
vtkRenderingCore-7.0-gd.lib
vtkInteractionWidgets-7.0-gd.lib
vtkRenderingOpenGL-7.0-gd.lib
vtkFiltersGeneral-7.0-gd.lib
vtkFiltersCore-7.0-gd.lib
vtkCommonDataModel-7.0-gd.lib
vtkCommonCore-7.0-gd.lib
flann_cpp_s-gd.lib
qhullstatic_d.lib
OpenNI2.lib
kernel32.lib
user32.lib
gdi32.lib
winspool.lib
shell32.lib
ole32.lib
oleaut32.lib
uuid.lib
comdlg32.lib
advapi32.lib
comctl32.lib
wsock32.lib
glu32.lib
opengl32.lib
ws2_32.lib
Psapi.lib
7.點選配置屬性下的除錯,右邊環境項設為
PATH=$(PCL_ROOT)bin;$(PCL_ROOT)3rdPartyFLANNbin;$(PCL_ROOT)3rdPartyVTKbin;$(PCL_ROOT)Qhullbin;$(PCL_ROOT)3rdPartyOpenNI2Tools;$(PATH)
8.點選屬性配置下的C/C++的子項前處理器,右邊預處理定義,新增上 _SCL_SECURE_NO_WARNINGS 和 _CRT_SECURE_NO_WARNINGS
9.點選C/C++下的子項:常規,右邊的附加包含目錄新增 D:\PCL 1.8.0\3rdParty\Boost\include\boost-1_61
注意:剛剛的配置都是在Debug下的配置,也可以在Release下配置,二者只有在連結器—》輸入—》附加依賴項中新增的檔案不同,其他配置是一樣的,下面是Release下的附加依賴項所新增的檔案:
pcl_common_release.lib
pcl_features_release.lib
pcl_filters_release.lib
pcl_io_ply_release.lib
pcl_io_release.lib
pcl_kdtree_release.lib
pcl_keypoints_release.lib
pcl_ml_release.lib
pcl_octree_release.lib
pcl_outofcore_release.lib
pcl_people_release.lib
pcl_recognition_release.lib
pcl_registration_release.lib
pcl_sample_consensus_release.lib
pcl_search_release.lib
pcl_segmentation_release.lib
pcl_stereo_release.lib
pcl_surface_release.lib
pcl_tracking_release.lib
pcl_visualization_release.lib
libboost_atomic-vc140-mt-1_61.lib
libboost_chrono-vc140-mt-1_61.lib
libboost_container-vc140-mt-1_61.lib
libboost_context-vc140-mt-1_61.lib
libboost_coroutine-vc140-mt-1_61.lib
libboost_date_time-vc140-mt-1_61.lib
libboost_exception-vc140-mt-1_61.lib
libboost_filesystem-vc140-mt-1_61.lib
libboost_graph-vc140-mt-1_61.lib
libboost_iostreams-vc140-mt-1_61.lib
libboost_locale-vc140-mt-1_61.lib
libboost_log-vc140-mt-1_61.lib
libboost_log_setup-vc140-mt-1_61.lib
libboost_math_c99-vc140-mt-1_61.lib
libboost_math_c99f-vc140-mt-1_61.lib
libboost_math_c99l-vc140-mt-1_61.lib
libboost_math_tr1-vc140-mt-1_61.lib
libboost_math_tr1f-vc140-mt-1_61.lib
libboost_math_tr1l-vc140-mt-1_61.lib
libboost_mpi-vc140-mt-1_61.lib
libboost_prg_exec_monitor-vc140-mt-1_61.lib
libboost_program_options-vc140-mt-1_61.lib
libboost_random-vc140-mt-1_61.lib
libboost_regex-vc140-mt-1_61.lib
libboost_serialization-vc140-mt-1_61.lib
libboost_signals-vc140-mt-1_61.lib
libboost_system-vc140-mt-1_61.lib
libboost_test_exec_monitor-vc140-mt-1_61.lib
libboost_thread-vc140-mt-1_61.lib
libboost_timer-vc140-mt-1_61.lib
libboost_unit_test_framework-vc140-mt-1_61.lib
libboost_wave-vc140-mt-1_61.lib
libboost_wserialization-vc140-mt-1_61.lib
flann.lib
flann_s.lib
flann-gd.lib
flann_cpp_s.lib
flann_cpp_s-gd.lib
flann_s-gd.lib
qhull.lib
qhull_d.lib
qhullcpp_d.lib
qhullstatic.lib
qhullstatic_d.lib
qhullstatic_r.lib
qhullstatic_r_d.lib
qhull_p.lib
qhull_p_d.lib
qhull_r.lib
qhull_r_d.lib
vtkalglib-7.0.lib
vtkChartsCore-7.0.lib
vtkCommonColor-7.0.lib
vtkCommonComputationalGeometry-7.0.lib
vtkCommonCore-7.0.lib
vtkCommonDataModel-7.0.lib
vtkCommonExecutionModel-7.0.lib
vtkCommonMath-7.0.lib
vtkCommonMisc-7.0.lib
vtkCommonSystem-7.0.lib
vtkCommonTransforms-7.0.lib
vtkDICOMParser-7.0.lib
vtkDomainsChemistry-7.0.lib
vtkexoIIc-7.0.lib
vtkexpat-7.0.lib
vtkFiltersAMR-7.0.lib
vtkFiltersCore-7.0.lib
vtkFiltersExtraction-7.0.lib
vtkFiltersFlowPaths-7.0.lib
vtkFiltersGeneral-7.0.lib
vtkFiltersGeneric-7.0.lib
vtkFiltersGeometry-7.0.lib
vtkFiltersHybrid-7.0.lib
vtkFiltersHyperTree-7.0.lib
vtkFiltersImaging-7.0.lib
vtkFiltersModeling-7.0.lib
vtkFiltersParallel-7.0.lib
vtkFiltersParallelImaging-7.0.lib
vtkFiltersProgrammable-7.0.lib
vtkFiltersSelection-7.0.lib
vtkFiltersSMP-7.0.lib
vtkFiltersSources-7.0.lib
vtkFiltersStatistics-7.0.lib
vtkFiltersTexture-7.0.lib
vtkFiltersVerdict-7.0.lib
vtkfreetype-7.0.lib
vtkGeovisCore-7.0.lib
vtkhdf5-7.0.lib
vtkhdf5_hl-7.0.lib
vtkImagingColor-7.0.lib
vtkImagingCore-7.0.lib
vtkImagingFourier-7.0.lib
vtkImagingGeneral-7.0.lib
vtkImagingHybrid-7.0.lib
vtkImagingMath-7.0.lib
vtkImagingMorphological-7.0.lib
vtkImagingSources-7.0.lib
vtkImagingStatistics-7.0.lib
vtkImagingStencil-7.0.lib
vtkInfovisCore-7.0.lib
vtkInfovisLayout-7.0.lib
vtkInteractionImage-7.0.lib
vtkInteractionStyle-7.0.lib
vtkInteractionWidgets-7.0.lib
vtkIOAMR-7.0.lib
vtkIOCore-7.0.lib
vtkIOEnSight-7.0.lib
vtkIOExodus-7.0.lib
vtkIOExport-7.0.lib
vtkIOGeometry-7.0.lib
vtkIOImage-7.0.lib
vtkIOImport-7.0.lib
vtkIOInfovis-7.0.lib
vtkIOLegacy-7.0.lib
vtkIOLSDyna-7.0.lib
vtkIOMINC-7.0.lib
vtkIOMovie-7.0.lib
vtkIONetCDF-7.0.lib
vtkIOParallel-7.0.lib
vtkIOParallelXML-7.0.lib
vtkIOPLY-7.0.lib
vtkIOSQL-7.0.lib
vtkIOVideo-7.0.lib
vtkIOXML-7.0.lib
vtkIOXMLParser-7.0.lib
vtkjpeg-7.0.lib
vtkjsoncpp-7.0.lib
vtklibxml2-7.0.lib
vtkmetaio-7.0.lib
vtkNetCDF-7.0.lib
vtkNetCDF_cxx-7.0.lib
vtkoggtheora-7.0.lib
vtkParallelCore-7.0.lib
vtkpng-7.0.lib
vtkproj4-7.0.lib
vtkRenderingAnnotation-7.0.lib
vtkRenderingContext2D-7.0.lib
vtkRenderingContextOpenGL-7.0.lib
vtkRenderingCore-7.0.lib
vtkRenderingFreeType-7.0.lib
vtkRenderingImage-7.0.lib
vtkRenderingLabel-7.0.lib
vtkRenderingLOD-7.0.lib
vtkRenderingOpenGL-7.0.lib
vtkRenderingVolume-7.0.lib
vtkRenderingVolumeOpenGL-7.0.lib
vtksqlite-7.0.lib
vtksys-7.0.lib
vtktiff-7.0.lib
vtkverdict-7.0.lib
vtkViewsContext2D-7.0.lib
vtkViewsCore-7.0.lib
vtkViewsInfovis-7.0.lib
vtkzlib-7.0.lib
完成之後點選確定
在“檢視”中點選屬性管理器(如果沒有找到,可以在檢視—》其他視窗;中找到),分別右擊Debug|x64和Release|x64,新增現有屬性表,把你下載的屬性表文件夾裡的紅框標記檔案新增進去。
將下載的rabbit.pcd檔案放在專案所在的資料夾下,右擊專案名,選擇“開啟所在的資料夾”,把檔案複製到那裡就可以了。複製完成之後就可以點第二步:本地Windows除錯。
執行成功就會出現下圖
此時已經配置成功。
注意:當時我除錯一直報錯:找不到pcl_io_debug.dll、pcl_common_release等檔案,重啟一下電腦,再在VS2015 開啟剛才的專案除錯就好了。主要是因為配置變數之後要重啟電腦。
安裝CMake
這裡仍以選擇安裝在D:\CMake中為例。CMake的安裝比較簡單,記得在安裝過程中選擇Add to the system PATH for all users.和創造快捷方式。
測試CMake
在你安裝Pcl的路徑下,本文是D:\PCL 1.8.0下建立一個名為example的資料夾,example資料夾裡新建名為cmake-bin的資料夾和名為source的資料夾;把下載的CMakeLists.txt和project_inliers.cpp檔案放入source資料夾中。
開啟CMake(如果PCL在C盤別忘了是以管理員的身份執行),點選下圖中的紅框,選擇路徑。
然後點選左下的Configure,在彈出的對話方塊中選擇介面卡Visual Studio 14 2015 Win64,其他的不改,點選Finish。底部會出現Configuring done代表完成,在點選Generate,出現Generating done生成成功。
此時解決方案就生成成功了,在D:\PCL 1.8.0\example\cmake-bin資料夾下,點選cmake-bin資料夾下的project_inliers.sln檔案就可以用VS2015打開了。開啟project_inliers.sln後, 並重新設定project_inliers為啟動項,不然報錯。
點選除錯,出現下圖就是成功了(網上找的,我的除錯後下圖一閃而過)。