VS2017配置PCL1.9(win10环境)
由于實驗需要用到點云數據,正好網上搜PCL點云庫的時候看到PCL1.9出來了,就索性跟隨時代的步伐直接在VS2017上安裝PCL1.9試一下。
文章目錄
- VS2017下載與安裝
- PCL1.9.0下載與安裝
- 1.下載
- 2.安裝
- VS2017配置PCL1.9.0
- 1.系統環境變量
- 2.配置相關目錄
- 3.可能的報錯
- 3.1...無法解析的外部符號...
- 3.2遇到“XXX被聲明為已否決”
- 3.3檢測到XXX的不匹配項:值.....(如下圖)
- 3.4第三方庫flann報錯:
- 附錄1—復制鏈接庫列表
- 附錄2—獲取自己的鏈接庫列表
VS2017下載與安裝
參見我的第一篇博客O(∩_∩)O哈哈~
https://blog.csdn.net/weixin_41991128/article/details/83656543
PCL1.9.0下載與安裝
1.下載
github上有可供直接下載的PCL1.9.0版本,安全可靠…鏈接如下:
鏈接: https://github.com/PointCloudLibrary/pcl/releases.
根據自己的編譯器環境選擇下載win64或者winX32的版本,例如博主下載的VS2017win64版本:下載
PCL-1.9.0-AllInOne-msvc2017-win64.exe
pcl-1.9.0-pdb-msvc2017-win64.zip
兩個文件。
2.安裝
安裝步驟很簡單,傻瓜式安裝,點擊“PCL-1.9.0-AllInOne-msvc2017-win64.exe”進行安裝:
這里建議選第二個:“Add PCL to the system PATH for all users”,它可以自動添加系統路徑(不過我的失敗了,說是什么路徑名字太長)。
然后選擇安裝的文件夾,以及選擇生成快捷方式。
這里選擇第三方庫,除非你清楚地知道自己需要什么庫不需要什么庫,不然就都選上(能了解自己想要什么庫的朋友估計也不需要看我這篇基礎教學了…)。
安裝到快結束的時候會彈出安裝OpenNI的提示,建議安裝到你自定義的第三方庫的目錄下(不是硬性要求安裝目錄,這樣只是方便之后配置環境方便);
由于我之前安裝過OpenNI的庫,所以我彈出的選項是“修復"不是“安裝”,這里就沒截圖了,截圖的是OpenNI的安裝目錄,供讀者參考。
OpenNI安裝完了之后點擊確定你會發現PCL要不了幾秒鐘也就安裝成功了,到此安裝成功了一大半了:
解壓“pcl-1.9.0-pdb-msvc2017-win64.zip”,將解壓得到的文件夾中的內容添加到你的PCL安裝目錄==…\PCL 1.9.0\bin==中。
安裝到此結束。
VS2017配置PCL1.9.0
這個的配置是真的麻煩╮(╯▽╰)╭…
1.系統環境變量
安裝的時候選了“Add PCL to the system PATH for all users”并且沒有報錯的,理論上來說可以跳過這一步,博主提示“路徑太長添加失敗”還是什么的,需要手動添加一次。
計算機—>屬性—>高級系統屬性—>高級—>環境變量
找到path,雙擊。
添加紅框里面的8個,由于博主之前裝PCL1.8的時候裝了OpenNI,所以OpenNI的路徑不在PCL1.9.0的目錄下,這不是重點,找到你自己剛剛安裝的目錄,然后添加你自己對應的目錄。
老規矩,這一步完成之后需要將電腦注銷一下才能生效(不用重啟)。
2.配置相關目錄
打開VS2017新建一個空項目。
輸入名字,選擇生成文件夾,然后選擇“空項目”,直接確定就可以了。
首先確保編譯環境是X64,我這里選擇的是Release版本,Debug版本配置只有一步不一樣,其他都是一樣的,我會在下文中指出。(因為Release版本運行起來不顯示中間變量,速度比Debug快,應該是這樣…),然后我這里還是推薦使用新建屬性表,這樣的話你可以配置多個版本,在你需要的時候直接添加對應的屬性表就可以了,如果你全添加在自帶的屬性表中的話,當你以后添加的版本太多或者添加的其他庫太多會導致災難性的后果:配置屬性沖突等…
這里在對應的屬性管理器—>Release|X64中添加新的屬性表“PCL1.9.0X64r”(名字取得自己看得懂就行)。
通用屬性—>VC++目錄—>包含目錄中添加紅框中的7個目錄(博主的OpenNI庫安裝在PCL1.8的目錄中的,讀者注意檢查自己的目錄是否正確):
然后是添加lib目錄,在通用屬性—>VC++目錄—>庫目錄中添加如下6個目錄:
在C/C++—>預處理器—>預處理器定義中添加:
將C/C++—>所有選項—>SDL檢查改為否。
最后,也是最麻煩的一個:在通用屬性—>鏈接器—>輸入—>附加的依賴項中添加對應的.“lib”文件,主要是添加PCL的“.lib”文件和第三方庫中VTK的“.lib”文件。文件有很多,列表附在文章末尾。 檢查你的lib文件和我給出的靜態鏈接庫版本一不一樣,如果不一樣這里給出一個快速獲取所有靜態鏈接庫文件名的方法,方法也附在文章末尾。
到這一步基本上就算是配置完了,跑個例程試一下:
新建一個main.cpp,代碼如下:
其中點云的數據保存在“test.txt“中,在工程目錄中新建一個txt文檔,添加:
-3.03387 -3.03879 -2.05533 -3.03776 -3.03882 -2.05536 -3.04165 -3.03886 -2.05538 -3.04554 -3.0389 -2.05541 -3.04943 -3.03894 -2.05543 -3.05332 -3.03897 -2.05546 -3.05721 -3.03901 -2.05548 -3.0611 -3.03905 -2.05551 -3.06499 -3.03908 -2.05553 -3.06888 -3.03912 -2.05556 -3.07277 -3.03916 -2.05558 -3.07666 -3.03919 -2.05561 -3.08055 -3.03923 -2.05563 -3.08444 -3.03927 -2.05566 -3.08833 -3.03931 -2.05568 -3.09222 -3.03934 -2.05571 -3.09612 -3.03938 -2.05573 -3.10001 -3.03942 -2.05576 -3.1039 -3.03945 -2.05578 -3.10779 -3.03949 -2.05581 -3.11168 -3.03953 -2.05583 -3.11557 -3.03956 -2.05586 -3.11947 -3.0396 -2.05588 -3.12336 -3.03964 -2.05591 -3.12725 -3.03968 -2.05593 -3.13114 -3.03971 -2.05596 -3.13503 -3.03975 -2.05598 -3.13893 -3.03979 -2.05601 -3.14282 -3.03982 -2.05603 -3.14671 -3.03986 -2.05606 -3.1506 -3.0399 -2.05608 -3.1545 -3.03993 -2.05611 -3.15839 -3.03997 -2.05613 -3.16228 -3.04001 -2.05616 -3.16618 -3.04005 -2.05618 -3.17007 -3.04008 -2.05621 -3.17396 -3.04012 -2.05623 -3.17786 -3.04016 -2.05626 -3.18175 -3.04019 -2.05628 -3.18564 -3.04023 -2.05631 -3.18954 -3.04027 -2.05633 -3.19343 -3.0403 -2.05636 -3.19732 -3.04034 -2.05638 -3.20122 -3.04038 -2.05641 -3.20511 -3.04042 -2.05643 -3.20901 -3.04045 -2.05646 -3.2129 -3.04049 -2.05648 -3.21679 -3.04053 -2.05651 -3.22069 -3.04056 -2.05653 -3.22458 -3.0406 -2.05656 -3.22848 -3.04064 -2.05658 -3.23237 -3.04068 -2.05661 -3.23627 -3.04071 -2.05663 -3.24016 -3.04075 -2.05666 -3.24406 -3.04079 -2.05668 -3.24795 -3.04082 -2.05671 -3.25185 -3.04086 -2.05673 -3.25574 -3.0409 -2.05676 -3.25964 -3.04093 -2.05678 -3.26353 -3.04097 -2.05681 -3.26743 -3.04101 -2.05683 -3.27132 -3.04105 -2.05686 -3.27522 -3.04108 -2.05688 -3.27912 -3.04112 -2.05691 -3.28301 -3.04116 -2.05693 -3.28691 -3.04119 -2.05696 -3.2908 -3.04123 -2.05698 -3.2947 -3.04127 -2.05701 -3.2986 -3.0413 -2.05703 -3.30249 -3.04134 -2.05706 -3.30639 -3.04138 -2.05708 -3.31029 -3.04142 -2.05711 -3.31418 -3.04145 -2.05713 -3.31808 -3.04149 -2.05716 -3.32198 -3.04153 -2.05718 -3.32587 -3.04156 -2.05721 -3.32977 -3.0416 -2.05723 -3.33367 -3.04164 -2.05726 -3.33756 -3.04168 -2.05728 -3.34146 -3.04171 -2.05731 -3.34536 -3.04175 -2.05733 -3.34926 -3.04179 -2.05736 -3.35315 -3.04182 -2.05738 -3.35705 -3.04186 -2.05741 -3.36095 -3.0419 -2.05743 -3.36485 -3.04193 -2.05746 -3.36874 -3.04197 -2.05748 -3.37264 -3.04201 -2.05751 -3.37654 -3.04205 -2.05753 -3.38044 -3.04208 -2.05756 -3.38434 -3.04212 -2.05758 -3.38824 -3.04216 -2.05761 -3.39213 -3.04219 -2.05764運行結果:一根點云構成的線段
3.可能的報錯
3.1…無法解析的外部符號…
1>vtkCommonCore-8.0-gd.lib(vtkWin32OutputWindow.obj) : error LNK2001: 無法解析的外部符號 __imp_MessageBoxA 1>vtkCommonCore-8.0-gd.lib(vtkWin32OutputWindow.obj) : error LNK2019: 無法解析的外部符號 __imp_GetStockObject,該符號在函數 "protected: static int __cdecl vtkWin32OutputWindow::Initialize(void)" (?Initialize@vtkWin32OutputWindow@@KAHXZ) 中被引用 ...
在最頂端添加:
3.2遇到“XXX被聲明為已否決”
直接雙擊屬性表的根目錄Debug|X64
然后更改SDL檢查為否:
3.3檢測到XXX的不匹配項:值…(如下圖)
解決方法:
1.首先檢查你屬性表中:鏈接器—輸入—附加依耐項中配置的.lib文件是不是你所用的debug/release版本;
2.如果第一步沒錯,嘗試以下步驟:
直接雙擊屬性表的根目錄Release|X64(根據你使用的是Debug還是Release)。找到運行庫,更改為其他幾個試一下。
3.4第三方庫flann報錯:
添加頭文件#include <pcl/registration/icp.h>編譯的時候可能會遇到如下報錯:
1>...\flann\algorithms\dist.h(523): error C3861: “pop_t”: 找不到標識符解決方法:
(注由于要對第三方庫的頭文件進行修改,建議先備份一下原頭文件,其路徑...\PCL 1.9.0\3rdParty\FLANN\include\flann\algorithms\dist.h)
開始解決:
雙擊該行輸出直接打開dist.h頭文件;
將第503行的typedef unsigned long long pop_t;移動到第480行前面(如下圖);
附錄1—復制鏈接庫列表
注意VTK的版本,在你的路徑:…PCL1.9.0\PCL 1.9.0\3rdParty\VTK\lib 中查看自己VTK的版本。
Debug版本:注意VTK的版本 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 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 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 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 vtkRenderingCore-8.1-gd.lib vtkRenderingFreeType-8.1-gd.lib vtkRenderingGL2PS-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 vtkRenderingVolume-8.1-gd.lib vtkRenderingVolumeOpenGL-8.1-gd.lib vtksqlite-8.1-gd.lib vtksys-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 vtkzlib-8.1-gd.lib Release版本:注意VTK的版本 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 vtkalglib-8.1.lib vtkChartsCore-8.1.lib vtkCommonColor-8.1.lib vtkCommonComputationalGeometry-8.1.lib vtkCommonCore-8.1.lib vtkCommonDataModel-8.1.lib vtkCommonExecutionModel-8.1.lib vtkCommonMath-8.1.lib vtkCommonMisc-8.1.lib vtkCommonSystem-8.1.lib vtkCommonTransforms-8.1.lib vtkDICOMParser-8.1.lib vtkDomainsChemistry-8.1.lib vtkexoIIc-8.1.lib vtkexpat-8.1.lib vtkFiltersAMR-8.1.lib vtkFiltersCore-8.1.lib vtkFiltersExtraction-8.1.lib vtkFiltersFlowPaths-8.1.lib vtkFiltersGeneral-8.1.lib vtkFiltersGeneric-8.1.lib vtkFiltersGeometry-8.1.lib vtkFiltersHybrid-8.1.lib vtkFiltersHyperTree-8.1.lib vtkFiltersImaging-8.1.lib vtkFiltersModeling-8.1.lib vtkFiltersParallel-8.1.lib vtkFiltersParallelImaging-8.1.lib vtkFiltersPoints-8.1.lib vtkFiltersProgrammable-8.1.lib vtkFiltersSelection-8.1.lib vtkFiltersSMP-8.1.lib vtkFiltersSources-8.1.lib vtkFiltersStatistics-8.1.lib vtkFiltersTexture-8.1.lib vtkFiltersTopology-8.1.lib vtkFiltersVerdict-8.1.lib vtkfreetype-8.1.lib vtkGeovisCore-8.1.lib vtkgl2ps-8.1.lib vtkhdf5-8.1.lib vtkhdf5_hl-8.1.lib vtkImagingColor-8.1.lib vtkImagingCore-8.1.lib vtkImagingFourier-8.1.lib vtkImagingGeneral-8.1.lib vtkImagingHybrid-8.1.lib vtkImagingMath-8.1.lib vtkImagingMorphological-8.1.lib vtkImagingSources-8.1.lib vtkImagingStatistics-8.1.lib vtkImagingStencil-8.1.lib vtkInfovisCore-8.1.lib vtkInfovisLayout-8.1.lib vtkInteractionImage-8.1.lib vtkInteractionStyle-8.1.lib vtkInteractionWidgets-8.1.lib vtkIOAMR-8.1.lib vtkIOCore-8.1.lib vtkIOEnSight-8.1.lib vtkIOExodus-8.1.lib vtkIOExport-8.1.lib vtkIOExportOpenGL-8.1.lib vtkIOGeometry-8.1.lib vtkIOImage-8.1.lib vtkIOImport-8.1.lib vtkIOInfovis-8.1.lib vtkIOLegacy-8.1.lib vtkIOLSDyna-8.1.lib vtkIOMINC-8.1.lib vtkIOMovie-8.1.lib vtkIONetCDF-8.1.lib vtkIOParallel-8.1.lib vtkIOParallelXML-8.1.lib vtkIOPLY-8.1.lib vtkIOSQL-8.1.lib vtkIOTecplotTable-8.1.lib vtkIOVideo-8.1.lib vtkIOXML-8.1.lib vtkIOXMLParser-8.1.lib vtkjpeg-8.1.lib vtkjsoncpp-8.1.lib vtklibharu-8.1.lib vtklibxml2-8.1.lib vtklz4-8.1.lib vtkmetaio-8.1.lib vtkNetCDF-8.1.lib vtknetcdfcpp-8.1.lib vtkoggtheora-8.1.lib vtkParallelCore-8.1.lib vtkpng-8.1.lib vtkproj4-8.1.lib vtkRenderingAnnotation-8.1.lib vtkRenderingContext2D-8.1.lib vtkRenderingContextOpenGL-8.1.lib vtkRenderingCore-8.1.lib vtkRenderingFreeType-8.1.lib vtkRenderingGL2PS-8.1.lib vtkRenderingImage-8.1.lib vtkRenderingLabel-8.1.lib vtkRenderingLIC-8.1.lib vtkRenderingLOD-8.1.lib vtkRenderingOpenGL-8.1.lib vtkRenderingVolume-8.1.lib vtkRenderingVolumeOpenGL-8.1.lib vtksqlite-8.1.lib vtksys-8.1.lib vtktiff-8.1.lib vtkverdict-8.1.lib vtkViewsContext2D-8.1.lib vtkViewsCore-8.1.lib vtkViewsInfovis-8.1.lib vtkzlib-8.1.lib附錄2—獲取自己的鏈接庫列表
win+r調出“運行”窗口并輸出cmd 輸入:cd /d D:\P_pcl\PCL1.9.0\PCL 1.9.0\3rdParty\VTK\lib 回車 (填自己的路徑) 輸入:dir /b *.lib *>0.txt 回車
這時打開你對應路勁的目錄,多了一個0.txt文件,里面存了你這個文件夾里所有鏈接庫名字。
由于每一個Debug版本和Release版本的鏈接庫是挨在一起的。寫一個讀取文檔并對其分別保存就行了。
具體代碼參見:
鏈接: https://blog.csdn.net/weixin_41991128/article/details/83965051.
總結
以上是生活随笔為你收集整理的VS2017配置PCL1.9(win10环境)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Bomblab(ICS课程回课pku)
- 下一篇: html网站设计项目心得,网页设计制作心