Windows下PCL及其第三方库的安装编译过程
PCL库介绍:
Point Cloud Library (PCL) 是一个进行2D/3D图像处理和点云处理工程库。
PCL可以实现的功能:http://www.pointclouds.org/documentation/
PCL及其第三方库的安装、编译
PCL及其第三方库的安装、编译有两种方法:1、下载预编译版本。2、从源码进行编译安装。
-
预编译版本的下载安装:
-
在windows上使用All-in-one installers,必须首先安装Microsoft Visual Studio 2010 或者 Visual Studio 2008。
-
从PCL官网(http://www.pointclouds.org/downloads/windows.html)下载与Microsoft Visual Studio版本一致的All-in-one installers。
-
从官网下载的All-in-one installers中已经包含了相应的第三方库。
-
与安装其他软件类似,直接双击安装即可。
-
由于All-in-one installers提供的PCL库的版本较低,因此很多新添加的功能无法使用。
-
-
从源码进行安装、编译:
2.1 如果只是想使用最新版本的PCL库,仍然使用Microsoft Visual Studio作为编译工具,那么第三方库可以不从源码进行编译安装,而使用PCL官网提供的安装版本进行安装,PCL库则需要从源码开始进行编译、安装(http://pointclouds.org/documentation/tutorials/compiling_pcl_windows.php#compiling-pcl-windows)。
2.2 如果不想使用Microsoft Visual Studio作为编译工具 (比如想使用codeblocks的MinGW),则第三方库和PCL库都需要从源码进行安装编译(http://pointclouds.org/documentation/tutorials/compiling_pcl_dependencies_windows.php#compiling-pcl-dependencies-windows)。
2.3 本文主要讲解2.1的安装过程。
在Windows上,使用Microsoft Visual Studio作为编译工具,对PCL及其第三方库进行安装、编译过程:
-
在PCL官网(http://www.pointclouds.org/downloads/windows.html)下载与Microsoft Visual Studio版本一致的第三方库的安装文件。
-
因为安装PCL库只有Boost、Eigen、Flann、VTK这四个库是必须的,所以可以只下载安装这四个库。按照正常安装软件的步骤分别安装这些库,安装目录可以不是默认目录(如:"C:\\Program Files\\PCL\\Boost","C:\\Program Files\\PCL\\VTK 5.8.0";"C:\\Program Files\\PCL\\flann";"C:\\Program Files\\PCL\\Eigen")。
-
下载安装cmake(http://www.cmake.org/cmake/resources/software.html),请从Binary Distribution下的Windows (Win32 Installer)处下载。
-
下载PCL源码库(https://github.com/PointCloudLibrary/pcl/releases)。我下载的是PCL 1.7.1版,存放在"C:\\Program Files\\PCL\\trunk\\ "下。
-
修改"C:\\Program Files\\PCL\\trunk\\pcl-pcl-1.7.1\\io\\include\\pcl\\io\\png_io.h"文件中的
PCL_DEPRECATED ("template void savePNGFile (const std::string& file_name, const pcl::PointCloud& cloud),
"pcl::io::savePNGFile (file_name, cloud) is deprecated, please use a new generic "
"function pcl::io::savePNGFile (file_name, cloud, field_name) with \"rgb\" as the field name."
);"
为
"template PCL_DEPRECATED (void savePNGFile (const std::string& file_name, const pcl::PointCloud& cloud),
"pcl::io::savePNGFile (file_name, cloud) is deprecated, please use a new generic "
"function pcl::io::savePNGFile (file_name, cloud, field_name) with \"rgb\" as the field name."
);"。参考资料:http://blog.csdn.net/wishchin/article/details/14420037
-
运行cmake,将"C:\\Program Files\\PCL\\trunk\\pcl-pcl-1.7.1\\CMakeLists.txt"文件拖入cmake窗口,选择相应的路径及与Microsoft Visual Studio版本一致的编译工具。
-
勾选"Grouped"和"Advanced"复选框对变量进行分类,单击camke中的"configure"按钮进行配置。
-
在"Search"框中输入"boost"。一般情况下,cmake都会找到相应第三方库的路径,如果cmake没有找到,可以在相应的变量中自己设置,帮助cmake找到相应的路径。
-
依次检查Flann及Ungrouped Entries下的EIGEN_INCLUDE_DIR及VTK_DIR是否已经找到了相应的路径。如果没有找到,则修改其value值为相应的安装路径,帮助cmake找到路径。
-
这4个库都找到了相应的路径之后,再次点击configure。正常情况下,下面的结果窗口不会有error出现了。当然会有红色的字体出现,但是只要不是error都没有问题(一般情况下出现红色字体是因为没有安装相应的库,比如Intel的SDK库,这时Ungrouped Entries下的PXCAPI_DIR的相应结果会出现红色字体,如果你不用这个库,那么就不用管这些红色字体,如果你需要,可以下载安装相应版本的Intel的库后对cmake进行设置。如果有些强迫症患者实在不希望看到红字,可以直接将该选项的Value值设置为空)。
-
点击Generate,生成相应的文件。
-
在camke的目标路径下找到文件"C:\\Program Files\\PCL\\PCL\\PCL.sln",打开后。首先选择Debug版本,All-BUILDà右击àBuild。编译通过后选择Release版本,再次Build。注意debug和realse版本都要编译一遍,而且要全部编译通过(http://blog.csdn.net/silangquan/article/details/9533081)。
-
然后再把INSALL编译一下,debug和realse版本都要编译一遍。
-
到这里,PCL库就编译好了。
PCL库在vs2010中的配置过程
-
打开VS2010 ,创建一个新的工程,点击左侧窗口下方的属性管理器,双击Microsoft.Cpp.win32.user,弹出属性页。
-
点击VC++目录(VC++ Directories),
-
在包含目录(Include Directories)里添加:
-
C:\Program Files\PCL\Eigen\include
C:\Program Files\PCL\flann\include
C:\Program Files\PCL\VTK 5.8.0\include\vtk-5.8
C:\Program Files\PCL\Boost\include
C:\Program Files\PCL\include\pcl-1.7
b)
C:\Program Files\PCL\flann\lib
C:\Program Files\PCL\VTK 5.8.0\lib\vtk-5.8
C:\Program Files\PCL\Boost\lib
C:\Program Files\PCL\lib
-
点击C/C++——>常规(General),点开附加包含目录(Additional Include Directories),添加
C:\Program Files\PCL\Eigen\include
C:\Program Files\PCL\flann\include
C:\Program Files\PCL\VTK 5.8.0\include\vtk-5.8
C:\Program Files\PCL\Boost\include
C:\Program Files\PCL\include\pcl-1.7
-
点开链接器->常规,在附加库目录中添加
C:\Program Files\PCL\flann\lib
C:\Program Files\PCL\VTK 5.8.0\lib\vtk-5.8
C:\Program Files\PCL\Boost\lib
C:\Program Files\PCL\lib
-
确定后,关闭上述窗口。
-
双击Debug|win32,链接器->输入->附加依赖项里边添加:
opengl32.lib
pcl_common_debug.lib
pcl_features_debug.lib
pcl_filters_debug.lib
pcl_io_debug.lib
pcl_io_ply_debug.lib
pcl_kdtree_debug.lib
pcl_keypoints_debug.lib
pcl_octree_debug.lib
pcl_outofcore_debug.lib
pcl_people_debug.lib
pcl_recognition_debug.lib
pcl_registration_debug.lib
pcl_sample_consensus_debug.lib
pcl_search_debug.lib
pcl_segmentation_debug.lib
pcl_surface_debug.lib
pcl_tracking_debug.lib
pcl_visualization_debug.lib
boost_chrono-vc100-mt-gd-1_49.lib
boost_date_time-vc100-mt-gd-1_49.lib
boost_filesystem-vc100-mt-gd-1_49.lib
boost_graph-vc100-mt-gd-1_49.lib
boost_graph_parallel-vc100-mt-gd-1_49.lib
boost_iostreams-vc100-mt-gd-1_49.lib
boost_locale-vc100-mt-gd-1_49.lib
boost_math_c99-vc100-mt-gd-1_49.lib
boost_math_c99f-vc100-mt-gd-1_49.lib
boost_math_tr1-vc100-mt-gd-1_49.lib
boost_math_tr1f-vc100-mt-gd-1_49.lib
boost_mpi-vc100-mt-gd-1_49.lib
boost_prg_exec_monitor-vc100-mt-gd-1_49.lib
boost_program_options-vc100-mt-gd-1_49.lib
boost_random-vc100-mt-gd-1_49.lib
boost_regex-vc100-mt-gd-1_49.lib
boost_serialization-vc100-mt-gd-1_49.lib
boost_signals-vc100-mt-gd-1_49.lib
boost_system-vc100-mt-gd-1_49.lib
boost_thread-vc100-mt-gd-1_49.lib
boost_timer-vc100-mt-gd-1_49.lib
boost_unit_test_framework-vc100-mt-gd-1_49.lib
boost_wave-vc100-mt-gd-1_49.lib
boost_wserialization-vc100-mt-gd-1_49.lib
libboost_chrono-vc100-mt-gd-1_49.lib
libboost_date_time-vc100-mt-gd-1_49.lib
libboost_filesystem-vc100-mt-gd-1_49.lib
libboost_graph_parallel-vc100-mt-gd-1_49.lib
libboost_iostreams-vc100-mt-gd-1_49.lib
libboost_locale-vc100-mt-gd-1_49.lib
libboost_math_c99-vc100-mt-gd-1_49.lib
libboost_math_c99f-vc100-mt-gd-1_49.lib
libboost_math_tr1-vc100-mt-gd-1_49.lib
libboost_math_tr1f-vc100-mt-gd-1_49.lib
libboost_mpi-vc100-mt-gd-1_49.lib
libboost_prg_exec_monitor-vc100-mt-gd-1_49.lib
libboost_program_options-vc100-mt-gd-1_49.lib
libboost_random-vc100-mt-gd-1_49.lib
libboost_regex-vc100-mt-gd-1_49.lib
libboost_serialization-vc100-mt-gd-1_49.lib
libboost_signals-vc100-mt-gd-1_49.lib
libboost_system-vc100-mt-gd-1_49.lib
libboost_test_exec_monitor-vc100-mt-gd-1_49.lib
libboost_thread-vc100-mt-gd-1_49.lib
libboost_timer-vc100-mt-gd-1_49.lib
libboost_unit_test_framework-vc100-mt-gd-1_49.lib
libboost_wave-vc100-mt-gd-1_49.lib
libboost_wserialization-vc100-mt-gd-1_49.lib
MapReduceMPI-gd.lib
mpistubs-gd.lib
vtkalglib-gd.lib
vtkCharts-gd.lib
vtkCommon-gd.lib
vtkDICOMParser-gd.lib
vtkexoIIc-gd.lib
vtkexpat-gd.lib
vtkFiltering-gd.lib
vtkfreetype-gd.lib
vtkftgl-gd.lib
vtkGenericFiltering-gd.lib
vtkGeovis-gd.lib
vtkGraphics-gd.lib
vtkhdf5-gd.lib
vtkHybrid-gd.lib
vtkImaging-gd.lib
vtkInfovis-gd.lib
vtkIO-gd.lib
vtkjpeg-gd.lib
vtklibxml2-gd.lib
vtkmetaio-gd.lib
vtkNetCDF-gd.lib
vtkNetCDF_cxx-gd.lib
vtkpng-gd.lib
vtkproj4-gd.lib
vtkRendering-gd.lib
vtksqlite-gd.lib
vtksys-gd.lib
vtktiff-gd.lib
vtkverdict-gd.lib
vtkViews-gd.lib
vtkVolumeRendering-gd.lib
vtkWidgets-gd.lib
vtkzlib-gd.lib
flann-gd.lib
flann_cpp_s-gd.lib
flann_cuda_s-gd.lib
flann_s-gd.lib
注:
-
这些库是在编译Debug版本时得到的链接库,每个链接库的名称中都带有_debug或者-gd等信息,非常容易识别。这些内容存储在相应库的lib文件夹下,如"C:\\Program Files\\PCL\\lib\\pcl_common_debug.lib",可以通过编程序获取文件名,然后将文件名写入txt文件,之后将txt的内容复制到这里。
附一段Python的程序,供参考:
import sys
RootDir="C:\\Program Files\\PCL\\VTK 5.8.0\\lib\\vtk-5.8\\"
a=os.listdir(RootDir)
out=open("C:\\Users\\Administrator\\Desktop\\test.txt",'w')
final=[]
for s in a:
print RootDir+s
if os.path.isfile(RootDir+s):
if os.path.splitext(s)[1]==".lib":
final.append(s)
#在这里修改i从0开始或从1开始,以区分debug和release版本的不同
for i in range(1,len(final),2):
out.write(final[i]+'\n')
out.close()
-
这里一定要注意,是双击Debug|Win32来打开相应的属性窗口,跟上面提到的打开属性窗口的方式不一样。
-
我用的boost是1.49版本,所以boost后面都是_49结尾,这里不是拷贝过去就可以用的,也许你用的是1.50版本。
-
双击Release|win32,链接器->输入->附加依赖项里边添加:
pcl_common_release.lib
pcl_features_release.lib
pcl_filters_release.lib
pcl_io_ply_release.lib
pcl_io_release.lib
pcl_kdtree_release.lib
pcl_keypoints_release.lib
pcl_octree_release.lib
pcl_outofcore_release.lib
pcl_people_release.lib
pcl_recognition_release.lib
pcl_registration_release.lib
pcl_sample_consensus_release.lib
pcl_search_release.lib
pcl_segmentation_release.lib
pcl_surface_release.lib
pcl_tracking_release.lib
pcl_visualization_release.lib
boost_chrono-vc100-mt-1_49.lib
boost_date_time-vc100-mt-1_49.lib
boost_filesystem-vc100-mt-1_49.lib
boost_graph-vc100-mt-1_49.lib
boost_graph_parallel-vc100-mt-1_49.lib
boost_iostreams-vc100-mt-1_49.lib
boost_locale-vc100-mt-1_49.lib
boost_math_c99-vc100-mt-1_49.lib
boost_math_c99f-vc100-mt-1_49.lib
boost_math_tr1-vc100-mt-1_49.lib
boost_math_tr1f-vc100-mt-1_49.lib
boost_mpi-vc100-mt-1_49.lib
boost_prg_exec_monitor-vc100-mt-1_49.lib
boost_program_options-vc100-mt-1_49.lib
boost_random-vc100-mt-1_49.lib
boost_regex-vc100-mt-1_49.lib
boost_serialization-vc100-mt-1_49.lib
boost_signals-vc100-mt-1_49.lib
boost_system-vc100-mt-1_49.lib
boost_thread-vc100-mt-1_49.lib
boost_timer-vc100-mt-1_49.lib
boost_unit_test_framework-vc100-mt-1_49.lib
boost_wave-vc100-mt-1_49.lib
boost_wserialization-vc100-mt-1_49.lib
libboost_chrono-vc100-mt-1_49.lib
libboost_date_time-vc100-mt-1_49.lib
libboost_filesystem-vc100-mt-1_49.lib
libboost_graph_parallel-vc100-mt-1_49.lib
libboost_iostreams-vc100-mt-1_49.lib
libboost_locale-vc100-mt-1_49.lib
libboost_math_c99-vc100-mt-1_49.lib
libboost_math_c99f-vc100-mt-1_49.lib
libboost_math_tr1-vc100-mt-1_49.lib
libboost_math_tr1f-vc100-mt-1_49.lib
libboost_mpi-vc100-mt-1_49.lib
libboost_prg_exec_monitor-vc100-mt-1_49.lib
libboost_program_options-vc100-mt-1_49.lib
libboost_random-vc100-mt-1_49.lib
libboost_regex-vc100-mt-1_49.lib
libboost_serialization-vc100-mt-1_49.lib
libboost_signals-vc100-mt-1_49.lib
libboost_system-vc100-mt-1_49.lib
libboost_test_exec_monitor-vc100-mt-1_49.lib
libboost_thread-vc100-mt-1_49.lib
libboost_timer-vc100-mt-1_49.lib
libboost_unit_test_framework-vc100-mt-1_49.lib
libboost_wave-vc100-mt-1_49.lib
libboost_wserialization-vc100-mt-1_49.lib
MapReduceMPI.lib
mpistubs.lib
vtkalglib.lib
vtkCharts.lib
vtkCommon.lib
vtkDICOMParser.lib
vtkexoIIc.lib
vtkexpat.lib
vtkFiltering.lib
vtkfreetype.lib
vtkftgl.lib
vtkGenericFiltering.lib
vtkGeovis.lib
vtkGraphics.lib
vtkhdf5.lib
vtkHybrid.lib
vtkImaging.lib
vtkInfovis.lib
vtkIO.lib
vtkjpeg.lib
vtklibxml2.lib
vtkmetaio.lib
vtkNetCDF.lib
vtkNetCDF_cxx.lib
vtkpng.lib
vtkproj4.lib
vtkRendering.lib
vtksqlite.lib
vtksys.lib
vtktiff.lib
vtkverdict.lib
vtkViews.lib
vtkVolumeRendering.lib
vtkWidgets.lib
vtkzlib.lib
flann.lib
flann_cpp_s.lib
flann_cuda_s.lib
flann_s.lib
注:
-
这些库是在编译Release版本时得到的链接库,每个链接库的名称中都带有_release或者_s等信息,以区别于Debug版本。这些内容存储在相应库的lib文件夹下,如"C:\\Program Files\\PCL\\lib\\pcl_common_release.lib",可以通过编程序获取文件名,然后将文件名写入txt文件,之后将txt的内容复制到这里。
-
这里一定要注意,是双击Release|Win32来打开相应的属性窗口,跟上面提到的打开属性窗口的方式不一样。
-
打开计算机 à 系统属性 à 高级系统设置 à 环境变量,在用户环境变量中添加C:\Program Files\PCL\flann\bin;C:\Program files\PCL\bin;C:\Program Files\PCL\Boost\lib;C:\Program Files\PCL\VTK 5.8.0\lib\vtk-5.8; C:\Program Files\PCL\Eigen\bin。
-
如果你的用户变量里没有path,那么新建一个path变量,在添加就可以了(http://blog.sina.com.cn/s/blog_7b83134b0101acyb.html)。
在这之后,就完全完成了PCL的编译、安装、配置过程。在安装、编译、配置过程中看过不少人的博客,多谢各位的帮助。