在MS2010下直接編譯PCL程序可能遇到的LINK ERROR

        一直想根據官方的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
5.   編譯成功,運行時打開cmd,運行前先把PCL編譯好的基本模塊的動態鏈接庫dll文件拷到項目Debug目錄下,按Tutorial所說下載data, 轉到應用程序目錄下運行程序。


編譯過程中可能遇到的連接錯誤:

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教程程序編譯過程比較典型的鏈接錯誤就是上面幾種了,歡迎批評指正。

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