Windows环境下编译PCL
以下步骤如有错误或不妥,欢迎留言交流,以进一步优化编译和安装过程。
一. 安装CMake
进入 CMake官网 ,根据自己的电脑配置选择对应的安装包,下载并进行安装。
二. 依赖库的编译和安装
在编译PCL前须确保已正确安装了第三方依赖库,不能混用32为和64位的代码,不能混用不同编译器编译的第三方库。
a. Boost
下载地址: https://www.boost.org/users/download/
进入boost文件夹,运行bootstrap.bat,运行结束后会生成project-config.jam。
Boost | 用于智能指针等操作 | Eigen | 用于矩阵运算等 | FLANN | 用于邻域搜索等 | 可视化库,用于显示点云等 | QHULL | 一个强大的计算几何库,可以用于计算高维的convex hull,Delaunay triangulation,Voronoi diiagram等 | 用于图像交互界面等 | OpenNI | 用于获取点云等 |
1 |
b2.exe install toolset=msvc-14.3 address-model=64 --without-python --build-dir=build --prefix="C:\MyPrograms\PCL\Boost" |
b. Eigen
下载地址: https://gitlab.com/libeigen/eigen
打开CMake,分别设置Eigen的source和build路径。
点击按钮
Configure
。配置:
再次点击按钮
Configure
。
点击按钮
Generate
。
点击按钮
Open Project
。找到菜单
Build
->
Batch build...
,勾选
ALL_BUILD(Debug)
和
ALL_BUILD(Release)
,点击
Build
按钮。再勾选
INSTALL(Debug)
和
INSTALL(Release)
,点击
Build
按钮。
c. FLANN
打开CMake,分别设置FLANN的source和build路径。
点击按钮
Configure
。配置:
添加Entry:
Value CMAKE_DEBUG_POSTFIX STRING
再次点击按钮
Configure
。
点击按钮
Generate
。
点击按钮
Open Project
。找到菜单
Build
->
Batch build...
,勾选
ALL_BUILD(Debug)
和
ALL_BUILD(Release)
,点击
Build
按钮。再勾选
INSTALL(Debug)
和
INSTALL(Release)
,点击
Build
按钮。
d. QHull
打开CMake,分别设置QHull的source和build路径。
点击按钮
Configure
。配置:
再次点击按钮
Configure
。
点击按钮
Generate
。
点击按钮
Open Project
。找到菜单
Build
->
Batch build...
,勾选
ALL_BUILD(Debug)
和
ALL_BUILD(Release)
,点击
Build
按钮。再勾选
INSTALL(Debug)
和
INSTALL(Release)
,点击
Build
按钮。
e. VTK
打开CMake,分别设置VTK的source和build路径。
点击按钮
Configure
。配置:
添加Entry:
Value CMAKE_DEBUG_POSTFIX STRING如果需要对Qt的支持,则需要首先安装Qt( 点击下载 ),然后继续配置:
Value Qt5_DIR C:\MyPrograms\Qt\Qt5.13.1\5.13.1\msvc2017_64\lib\cmake\Qt5 VTK_QT_VERSION
再次点击按钮
Configure
。
点击按钮
Generate
。
点击按钮
Open Project
。找到菜单
Build
->
Batch build...
,勾选
ALL_BUILD(Debug)
和
ALL_BUILD(Release)
,点击
Build
按钮。再勾选
INSTALL(Debug)
和
INSTALL(Release)
,点击
Build
按钮。
三. 编译PCL
打开CMake,分别设置PCL的source和build路径。
点击按钮
Configure
。配置:
点击按钮
Generate
。
点击按钮
Open Project
。找到菜单
Build
->
Batch build...
,勾选
ALL_BUILD(Debug)
和
ALL_BUILD(Release)
,点击
Build
按钮。再勾选
INSTALL(Debug)
和
INSTALL(Release)
,点击
Build
按钮。
如果使用VS构建时报错,找到报错的项目,逐个解决。举例如下:
解决方法:在项目浏览器中右键点击出错项目
pcl_io_ply
,在
Configuration Properties
->
C/C++
->
Additional Include Directories
项中增加
Boost
的头文件目录,如
C:\MyPrograms\PCL\Boost\include\boost-1_78
。注意Debug和Release的配置都要做相应修改。然后右键项目
pcl_io_ply
进行
Build
即可。
解决方法:在项目浏览器中右键点击出错项目
pcl_kdtree
,在
Configuration Properties
->
Linker
->
Input
->
Additional Dependencies
项中增加
flann
相关的lib文件。对于Debug配置增加
C:\MyPrograms\PCL\flann\lib\flann_cpp_s-gd.lib
,对于Release配置增加
C:\MyPrograms\PCL\flann\lib\flann_cpp_s.lib
。然后右键项目
pcl_kdtree
进行
Build
即可。
四. 测试和使用PCL
-
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
int user_data;
void
viewerOneOff(pcl::visualization::PCLVisualizer& viewer)
{
viewer.setBackgroundColor(1.0, 0.5, 1.0);
pcl::PointXYZ o;
o.x = 1.0;
o.y = 0;
o.z = 0;
viewer.addSphere(o, 0.25, "sphere", 0);
std::cout << "i only run once" << std::endl;
}
void
viewerPsycho(pcl::visualization::PCLVisualizer& viewer)
{
static unsigned count = 0;
std::stringstream ss;
ss << "Once per viewer loop: " << count++;
viewer.removeShape("text", 0);
viewer.addText(ss.str(), 200, 300, "text", 0);
//FIXME: possible race condition here:
user_data++;
}
int
main()
{
pcl::PointCloud<pcl::PointXYZRGBA>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZRGBA>);
pcl::io::loadPCDFile("my_point_cloud.pcd", *cloud);
pcl::visualization::CloudViewer viewer("Cloud Viewer");
//blocks until the cloud is actually rendered
viewer.showCloud(cloud);
//use the following functions to get access to the underlying more advanced/powerful
//PCLVisualizer
//This will only get called once
viewer.runOnVisualizationThreadOnce(viewerOneOff);
//This will get called once per visualization iteration
viewer.runOnVisualizationThread(viewerPsycho);
while (!viewer.wasStopped())
{
//you can also do cool processing here
//FIXME: Note that this is running in a separate thread from viewerPsycho
//and you should guard against race conditions yourself...
user_data++;
}
return 0;
} -
配置项目属性页,Debug和Release要分别配置:
-
Configuration Properties
->Debugging
->Environment
加入各个库的bin文件夹,生成方式见 此节 (debuggingEnvironments.txt),例如PATH=%(PATH);C:\MyPrograms\PCL\PCL\bin;C:\MyPrograms\PCL\flann\bin;C:\MyPrograms\PCL\qhull\bin;C:\MyPrograms\PCL\VTK\bin
-
Configuration Properties
->VC++ Directories
->Include Directories
加入各个库的头文件所在的文件夹,生成方式见 此节 (includeDirs.txt),例如C:\MyPrograms\PCL\PCL\lib;C:\MyPrograms\PCL\Boost\lib;C:\MyPrograms\PCL\flann\lib;C:\MyPrograms\PCL\qhull\lib;C:\MyPrograms\PCL\VTK\lib;$(LibraryPath)
-
Configuration Properties
->VC++ Directories
->Library Directories
加入各个库的lib所在的文件夹,生成方式见 此节 (libDirs.txt),例如C:\MyPrograms\PCL\PCL\lib;C:\MyPrograms\PCL\Boost\lib;C:\MyPrograms\PCL\flann\lib;C:\MyPrograms\PCL\qhull\lib;C:\MyPrograms\PCL\VTK\lib;$(LibraryPath)
-
Configuration Properties
->Linker
->Input
->Additional Dependencies
加入分别与Debug和Release相对的lib文件名,生成方式见 此节 (libsDebugAll.txt和libsReleaseAll.txt),例如Debug的pcl_appsd.lib;pcl_commond.lib;...
或Release的pcl_apps.lib;pcl_common.lib;...
-
编译并运行此项目,如果可以显示如下可视化结果,即表明PCL成功安装。
五. 生成所需路径和lib文件
项目属性页和生成结果的对应关系如下:
项目属性页 Debugging -> Environment debuggingEnvironments.txt Include Directories includeDirs.txt Library Directories libDirs.txt Additional Dependencies (Debug) libsDebugAll.txt Additional Dependencies (Release) libsReleaseAll.txt六. 参考