一直想根据官方的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++》常规》附加包含目录
3. 添加库目录
右键项目》属性》配置属性》链接器》常规》附加库目录
4. 添加附加依赖库
右键项目》属性》配置属性》链接器》输入》附加依赖库
编译过程中可能遇到的连接错误:
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教程程序编译过程比较典型的链接错误就是上面几种了,欢迎批评指正。