在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教程程序编译过程比较典型的链接错误就是上面几种了,欢迎批评指正。

你可能感兴趣的:(error,link,链接错误,PCL程序)