一直想根據官方的Tutorial學習PCL,想跳過CMake文件,直接用MS2010用添加庫添加路徑的方式進行編譯。
現在通過Tutorial中一個較複雜的點雲配準的程序 pairwise_incremental_registration 來總結一下配置過程和可能遇到的ERROR解決方案。思路是把常用的路徑設成環境變量,這樣以後添加路徑時就可直接用$(路徑名)來調用。
設置PCL相關環境變量詳情參考下面的博客: http://blog.csdn.net/opensource07/article/details/7722569
1. 新建VS空項目,添加源文件pairwise_incremental_registration.cpp
2. 添加包含目錄
右鍵項目》屬性》配置屬性》C/C++》常規》附加包含目錄
- $(PCL_INCLUDE_DIR)
- $(PCL_BOOST)
- $(PCL_EIGEN)
- $(PCL_FLANN)
- $(PCL_VTK)
3. 添加庫目錄
右鍵項目》屬性》配置屬性》鏈接器》常規》附加庫目錄
- $(PCL_LIB_DIR)
- D:\Program Files\Boost\lib (因報ERROR某Boost相關庫找不到而填加)
- D:\Program Files\VTK 5.8.0\lib\vtk-5.8
4. 添加附加依賴庫
右鍵項目》屬性》配置屬性》鏈接器》輸入》附加依賴庫
- pcl_io_debug.lib
- pcl_registration_debug.lib
- pcl_filters_debug.lib
- pcl_visualization_debug.lib
- pcl_common_debug.lib
- pcl_search_debug.lib
- pcl_kdtree_debug.lib
- pcl_stereo_debug.lib
- vtkRendering-gd.lib
- vtkGraphics-gd.lib
- vtkverdict-gd.lib
- vtkImaging-gd.lib
- vtkIO-gd.lib
- vtkFiltering-gd.lib
- vtkCommon-gd.lib
- vtkDICOMParser-gd.lib
- vtkNetCDF-gd.lib
- vtkmetaio-gd.lib
- vtksqlite-gd.lib
- vtktiff-gd.lib
- vtkpng-gd.lib
- vtkjpeg-gd.lib
- vtkexpat-gd.lib
- vtkzlib-gd.lib
- vtksys-gd.lib
- opengl32.lib
- pcl_features_debug.lib
編譯過程中可能遇到的連接錯誤:
1. ERROR LINK1223:轉換到COFF期間失敗
解決方案:右鍵項目》屬性》配置屬性》清單工具》輸入和輸出》潛入清單, “是”改爲“否”。
或 安裝VS2010 Service Pack 1 永久解決。
2. ERROR LINK2019:無法解析的外部符號
問題原因:使用了某一個外部函數,或者只有函數聲明,沒有函數定義。這個錯誤主要都是和vtk相關的。
如果用到了外部函數,即使源程序中已經寫明瞭包含kernel32.lib,也要在鏈接的時候寫入鏈接程序。解決辦法就是在編譯選項中加入問題函數所在的lib文件即可。所以這裏即使已經添加了VTK的庫目錄,也要在附加鏈接庫里加上有關vtk的庫。
解決方案:搜索 “vtk VS2010配置”,找到配置攻略裏附加依賴庫那一塊一般加什麼庫。可以都加上。
vtkRendering.lib vtkGraphics.lib vtkverdict.libvtkImaging.lib vtkIO.lib vtkFiltering.lib vtkCommon.lib vtkDICOMParser.libvtkNetCDF.lib vtkmetaio.lib comctl32.lib wsock32.lib vtksqlite.lib vtkpng.libvtktiff.lib vtkzlib.lib vtkjpeg.lib vtkexpat.lib vtksys.lib ws2_32.libvfw32.lib vtkftgl.lib vtkfreetype.lib opengl32.lib vtkWidgets.libvtkVolumeRendering.lib vtkViews.libvtkproj4.lib vtklibxml2.lib vtkInfovis.lib vtkHybrid.lib vtkGeovis.libvtkGenericFiltering.lib vtkexoIIc.lib vtkCharts.lib vtkalglib.lib
3. ERROR LINK2038:檢測到 “_ITERATOR_DEBUG_LEVEL" 的不匹配項:值 ”0“ 不匹配值 ”2“
問題原因:可能是Debug下面引用了release下面編譯出來的靜態庫。
解決方案:vtk庫目錄下每個lib相應的都有-gd.lib, 於是把所有的都換成-gd.lib。
PCL教程程序編譯過程比較典型的鏈接錯誤就是上面幾種了,歡迎批評指正。