PCL-1.8 编译指南(WIN8/VS2013/x64)

PCL-1.8 编译爬坑教程(WIN8/VS2013/x64)

 

PCL集成了很多有名的处理3D点云的算法,学习使用PCL以及了解背后的算法非常重要。最新版本更是会有许多新算法的实现,这也是我自已动手编译PCL1.8的直接原因.本教程在WIN8系统 VS2013环境 x64平台编译并配置,主要参考文章http://blog.csdn.net/aptx704610875/article/details/49947049. 但也不尽相同(不同环境总会有不同的问题).Herewe go~~

 

使用工具:

VS2013

CMAKE3.3

 

第三方库:

Boost1.59.0
Eigen3.2.7
FLANN1.8.4
Qhull2015.2
VTK6.3.0
OpenNI2.2.0.33 Beta(OpenNI 2.X直接安装就好,注意下载正确的版本就行)

 

前戏:第三方库的编译配置

Boost 1.59.0
首先下载微软的mpi,然后在boost\tools\build\src\tools中找到mpi.jam,修改其中的这三行:

249 line local cluster_pack_path_native = "C:\\ProgramFiles\\Microsoft MPI" ;

251 line if [ GLOB $(cluster_pack_path_native)\\Inc : mpi.h ]

260 line options = $(cluster_pack_path)/Inc

然后打开cmd,进入boost文件夹,运行bootstrap.bat,运行结束后会生成project-config.jam,打开并在第四行加上:using mpi ; 接下来还是用cmd进入boost文件夹,运行:b2.exe toolset=msvc-12.0 address-model=32--build-dir=build\x86 install --prefix="C:\Program Files\Boost" -j8注意如果要开发x64的程序而不是64位系统,请运行:b2.exe toolset=msvc-12.0 address-model=64--build-dir=build\x64 install --prefix="X:\X\Boost" -j8(其中没事msvc-12.0代表vs2013,如果是11.0是vs2012,14.0是vs2015后面的C:\Program Files\Boost是boost的文件夹,b2.exe就在里面)然后等着就好了,时间有点久,耐心等。完成后在环境变量中建立BOOST_ROOT变量,值为boost文件夹地址C:\Program Files\Boost.

注:我下载的是boost_1_59_0-msvc-12-64安装版(EXE),安装后我以为不需要再按如上所述操作,然而情况是这里的安装只是将文件解压到安装路径了而已,在对PCL进行CMAKE时找不到BOOST,还需要按上述操作一遍才行.

 

Eigen 3.2.7

使用cmake,分别设置eigen的source和build路径,如build不存在,点击Configure会提示新建build文件夹,选择vs12-2013编译器,然后Generate。这里注意Configure时有CMAKE_INSTALL_PREFIX这个选项,很重要,默认为C:\Program Files\Eigen.这里的路径即为该软件最后的安装路径(也是环境变量中要设置的EIGEN_ROOT的路径,可设置为你想要的其它路径,后边的FLANNQHULLVTK也是一样道理).在参考文章中作者提到”要将该选项更改为源码所在文件夹,不然INSTALL时会出错”.其实不然,只要工程Generate后以管理员身份运行VS2013(右键-以管理员身份运行),再打开eigen.sln工程就不会有问题,待加载完文件后,生成ALL_BUILD(Debug 和 Release均要生成),完成后生成INSTALL(Debug and Release)。可以看到eigen安装路径中出现include文件夹。最后在环境变量中建立EIGEN_ROOT变量,值为eigen的安装路径。

注:参考文献中作者提到安装路径下会生成includelib文件夹,但在我编译和安装中只有include文件夹,并没有lib文件夹(我觉得他应该搞错了)

 

FLANN 1.8.4
使用cmake,分别设置Flann的source和build路径(如C:\flann,C:\flann\build),选择vs12-2013编译器.注意根据需要修改CMAKE_INSTALL_PREFIX,然后添加一个entry:
Name: CMAKE_DEBUG_POSTFIX
Type: STRING
Value: -gd
修改完后再次点Configure,然后Generate。在C:\flann\src\cpp\flann\util(源码)中找到serialization.h文件 在92行BASIC_TYPE_SERIALIZER(bool)之后加入以下代码:
#ifdef _MSC_VER
BASIC_TYPE_SERIALIZER( unsigned __int64 );
//注意此处__int64是两个下划线连一起
#endif

修改完后以管理员身份运行VS2013并打开flann.sln工程文件,待加载完文件后,(debug和release)生成all_build,完成后生成install(Debugand Release)。完成后可以看到flann安装路径下出现include和lib文件夹。最后在环境变量中建立FLANN_ROOT变量,值为flann安装路径。

 

Qhull 2015.2

使用cmake,分别设置qhull的source和build路径,如build不存在,点击Configure会提示新建build文件夹,选择vs12-2013-win64编译器.注意根据需要修改CMAKE_INSTALL_PREFIX,然后添加一个entry:
Name: CMAKE_DEBUG_POSTFIX
Type: STRING
Value: -d
修改完后再次点Configure,然后Generate。以管理员身份运行VS2013并打开qhull.sln工程文件,待加载完文件后,完成后生成ALL_BUILD(debug和release),然后生成INSTALL(Debugand Release)。完成后可以看到qhull安装路径中出现include和lib文件夹。最后在环境变量中建立QHULL_ROOT变量,值为qhull安装地址。

注:参考文献中作者提到需要在生成ALL_BUILD修改libqhulluser_eg2的项目属性,C/C++ -> 高级 ->编译为 C++代码 (/TP)”.也许对他所用的Qhull 2012.1版本需要,但通过测试了现对这里所用的Qhull 2015.2无需进行此操作,不然反倒编译出错.

 

VTK6.3.0

使使用cmake,分别设置eigen的source和build路径,如build不存在,点击Configure会提示新建build文件夹,选择vs12-2013-win64编译器.注意根据需要修改CMAKE_INSTALL_PREFIX选项,然后添加一个entry:
Name: CMAKE_DEBUG_POSTFIX
Type: STRING
Value: -gd
修改完后再次点Configure,然后Generate。以管理员身份运行VS2013并打开VTK.sln工程文件,待加载完文件后,生成ALL_BUILD(debug和release)(时间有点久,耐心等待),完成后生成install(debug和release)。完成后可以看到VTK文件夹中出现include和lib文件夹。最后在环境变量中建立VTK_ROOT,为VTK安装路径.

注:感觉VTK_ROOT这个环境变量貌似并没什么用.

 

高潮:配置PCL-1.8

使用cmake选择source和build文件夹,such as:

Where is the source code: C:\PCL-master\source
Where is build the binaries: C:\PCL-master\build
点击Configure,选择vs12-2013-win64编译器,正常情况下不会出现什么问题(我的有点小问题,见后边注解),注意根据需要修改CMAKE_INSTALL_PREFIX(我的路径为C:\ProgramFiles\PCL),再次点击Configure,然后generate生成.以管理员身份运行VS2013并打开PCL.sln,生成ALL_BUILD(Debug和Release模式,各自得半小时左右)

成功后到build文件夹中找到cmake_install.cmake修改第46行:

file(INSTALL DESTINATION"${CMAKE_INSTALL_PREFIX}/3rdParty/Boost" TYPE DIRECTORY FILES "C:/ProgramFiles/Boost/" REGEX "/[^/]*\\/uninstall\\.exe$" EXCLUDE)  其中C:/Program Files/Boost/为boost所在文件夹。也可以检查一下上下文中其他第三方库的文件夹地址有没有正确,错误的可以改正。

我的截图如下:

PCL-1.8 编译指南(WIN8/VS2013/x64)_第1张图片

随后生成INSTALL(Debug and Release)将PCL-1.8成功安装.

最后在环境变量中建立PCL_ROOT变量,值为PCL安装路径。在PATH中加入%PCL_ROOT%\bin;%PCL_ROOT%\3rdParty\Qhull\bin;%PCL_ROOT%\3rdParty\Flann\bin;%PCL_ROOT%\3rdParty\VTK\bin 注意每个分号后不能出现空格,不然运行工程时会出现找不到需要的dll(血的教训啊!!!)

注:(1)在对PCL进行CMAKE时还是会出现VTK_DIR NOT FOUND的情况,需要将VTD_DIR设为C:\Program Files\VTK\lib\cmake\vtk-6.3(即包含VTKConfig.cmake的路径)才可解决.

       (2)CMAKE进行Configure时,我的情况是需要将global_testsexamples等几个库选掉,才可通过.

(3)另外,还出现了一个情况,在生成INSTALL时,发现有几个库没有生成xxx_debug.dll(印象中有pcl_search_debug.dll, pcl_sample_consensus_debug.dll,pcl_ml_debug.dll, pcl_io_debug.dll等几个.但是ALL_BUILD明明在debug模式下生成是通过了的.Release模式下没有出现问题),导致INSTALL不成功.可能是因为我在睡觉前操作的生成,在机子运行中有暂停或什么导致的吧.在将这几个工程一个个重新在debug模式下生成后INSTALL顺利完成.

 

至此,PCL编译配置完成!新出锅的PCL-1.8经过简单测试后没有出现问题,最担心的点云显示也正常,终于可以飞起了,希望大家也都顺利编译成功!

OK~~ Let’s start the new PCL journey!

你可能感兴趣的:(PCL-1.8 编译指南(WIN8/VS2013/x64))