Windows和Linux环境下安装编译PCL的步骤及其相关问题

0. 简要说明

需求:分别在Windows和Linux(ubuntu)环境下,安装PCL,编译运行PCL程序。
目前测试可实现的环境:Windows,Ubuntu18,20(Ubuntu22的版本对不上,嫌麻烦)

1.Windows环境下

一般都是通过VS的方式。
准备工具:

  • VS2019 / VS2022
  • 疯狂星期四版PCL全家桶安装包(…ALLInOne-msvc对应版本-win64.exe) PCL官方 或者俺自用的

1.1 安装

以vs2019,安装PCL-1.11.1-ALLInOne-msvc-2019-win64.exe为例

  1. 将其安装到目录C:/Program Files
    安装PCL
  2. 安装他的依赖库。(注意,在过程中可能会弹出路径长度不够的提示,不用管他,直接OK或者关掉,自动会把OpenNI2放PCL的同级)
    安装依赖库
    安装的组件位置会是如下:
C:\Program Files\PCL 1.11.1          # PCL自身的库
C:\Program Files\OpenNI2             # PCL依赖的OpenNI2库
C:\Program Files\PCL 1.11.1\3rdParty # PCL依赖的其他库
  1. 配置环境变量
    修改 系统属性->环境变量->系统属性。如下图,可以看到 OPENNI2和PCL的变量已经设置好,现在需要修改Path的值
    环境变量
    将如下运行时库的路径加入Path
    更新Path
C:\Program Files\PCL 1.11.1\bin
C:\Program Files\PCL 1.11.1\3rdParty\VTK\bin
C:\Program Files\OpenNI2\Redist

1.2 VS工程配置

1.2.1 vs2019+PCL

在完成PCL的安装后,配置VS工程。
右击选择某个VS工程->属性进行修改。
前提:

  • 设置和编译时一定要注意编译器是否为X64,也要注意区分DEBUG/RELEASE
  • 配置属性->常规:注意平台工具集,C++语言标准,是否正确
  • C/C++ -> 常规->附加包含目录:是否为源文件的头文件路径(以源文件为对象的相对路径)
  • C/C++ ->所有选项->SDL检查:PCL工程的话,尽量还是把这个关闭
  1. VC++目录->包含目录:设置PCL库的头文件路径如下
C:\Program Files\PCL 1.11.1\include\pcl-1.11
C:\Program Files\PCL 1.11.1\3rdParty\Boost\include\boost-1_74
C:\Program Files\PCL 1.11.1\3rdParty\Eigen\eigen3
C:\Program Files\PCL 1.11.1\3rdParty\FLANN\include
C:\Program Files\PCL 1.11.1\3rdParty\Qhull\include
C:\Program Files\PCL 1.11.1\3rdParty\VTK\include\vtk-8.2
C:\Program Files\OpenNI2\Include
  1. VC++目录->库目录:设置PCL库的库文件路径。
C:\Program Files\PCL 1.11.1\lib
C:\Program Files\PCL 1.11.1\3rdParty\Boost\lib
C:\Program Files\PCL 1.11.1\3rdParty\FLANN\lib
C:\Program Files\PCL 1.11.1\3rdParty\Qhull\lib
C:\Program Files\PCL 1.11.1\3rdParty\VTK\lib
C:\Program Files\OpenNI2\Lib
  1. 链接器->输入->附加依赖库:设置PCL及它依赖的库,包括PCLvtk两部分。注意:两者都分为debug/release版本,添加时一定要注意区分。如下是debug版本。这里的步骤以debug版本举例
    PCL的库文件如下:
pcl_commond.lib
pcl_featuresd.lib
pcl_filtersd.lib
pcl_iod.lib
pcl_io_plyd.lib
pcl_kdtreed.lib
pcl_keypointsd.lib
pcl_mld.lib
pcl_octreed.lib
pcl_outofcored.lib
pcl_peopled.lib
pcl_recognitiond.lib
pcl_registrationd.lib
pcl_sample_consensusd.lib
pcl_searchd.lib
pcl_segmentationd.lib
pcl_stereod.lib
pcl_surfaced.lib
pcl_trackingd.lib
pcl_visualizationd.lib

vtk库:如下是debug版本。

vtkChartsCore-8.2-gd.lib
vtkCommonColor-8.2-gd.lib
vtkCommonComputationalGeometry-8.2-gd.lib
vtkCommonCore-8.2-gd.lib
vtkCommonDataModel-8.2-gd.lib
vtkCommonExecutionModel-8.2-gd.lib
vtkCommonMath-8.2-gd.lib
vtkCommonMisc-8.2-gd.lib
vtkCommonSystem-8.2-gd.lib
vtkCommonTransforms-8.2-gd.lib
vtkDICOMParser-8.2-gd.lib
vtkDomainsChemistry-8.2-gd.lib
vtkDomainsChemistryOpenGL2-8.2-gd.lib
vtkdoubleconversion-8.2-gd.lib
vtkexodusII-8.2-gd.lib
vtkexpat-8.2-gd.lib
vtkFiltersAMR-8.2-gd.lib
vtkFiltersCore-8.2-gd.lib
vtkFiltersExtraction-8.2-gd.lib
vtkFiltersFlowPaths-8.2-gd.lib
vtkFiltersGeneral-8.2-gd.lib
vtkFiltersGeneric-8.2-gd.lib
vtkFiltersGeometry-8.2-gd.lib
vtkFiltersHybrid-8.2-gd.lib
vtkFiltersHyperTree-8.2-gd.lib
vtkFiltersImaging-8.2-gd.lib
vtkFiltersModeling-8.2-gd.lib
vtkFiltersParallel-8.2-gd.lib
vtkFiltersParallelImaging-8.2-gd.lib
vtkFiltersPoints-8.2-gd.lib
vtkFiltersProgrammable-8.2-gd.lib
vtkFiltersSelection-8.2-gd.lib
vtkFiltersSMP-8.2-gd.lib
vtkFiltersSources-8.2-gd.lib
vtkFiltersStatistics-8.2-gd.lib
vtkFiltersTexture-8.2-gd.lib
vtkFiltersTopology-8.2-gd.lib
vtkFiltersVerdict-8.2-gd.lib
vtkfreetype-8.2-gd.lib
vtkGeovisCore-8.2-gd.lib
vtkgl2ps-8.2-gd.lib
vtkglew-8.2-gd.lib
vtkGUISupportMFC-8.2-gd.lib
vtkhdf5-8.2-gd.lib
vtkhdf5_hl-8.2-gd.lib
vtkImagingColor-8.2-gd.lib
vtkImagingCore-8.2-gd.lib
vtkImagingFourier-8.2-gd.lib
vtkImagingGeneral-8.2-gd.lib
vtkImagingHybrid-8.2-gd.lib
vtkImagingMath-8.2-gd.lib
vtkImagingMorphological-8.2-gd.lib
vtkImagingSources-8.2-gd.lib
vtkImagingStatistics-8.2-gd.lib
vtkImagingStencil-8.2-gd.lib
vtkInfovisCore-8.2-gd.lib
vtkInfovisLayout-8.2-gd.lib
vtkInteractionImage-8.2-gd.lib
vtkInteractionStyle-8.2-gd.lib
vtkInteractionWidgets-8.2-gd.lib
vtkIOAMR-8.2-gd.lib
vtkIOAsynchronous-8.2-gd.lib
vtkIOCityGML-8.2-gd.lib
vtkIOCore-8.2-gd.lib
vtkIOEnSight-8.2-gd.lib
vtkIOExodus-8.2-gd.lib
vtkIOExport-8.2-gd.lib
vtkIOExportOpenGL2-8.2-gd.lib
vtkIOExportPDF-8.2-gd.lib
vtkIOGeometry-8.2-gd.lib
vtkIOImage-8.2-gd.lib
vtkIOImport-8.2-gd.lib
vtkIOInfovis-8.2-gd.lib
vtkIOLegacy-8.2-gd.lib
vtkIOLSDyna-8.2-gd.lib
vtkIOMINC-8.2-gd.lib
vtkIOMovie-8.2-gd.lib
vtkIONetCDF-8.2-gd.lib
vtkIOParallel-8.2-gd.lib
vtkIOParallelXML-8.2-gd.lib
vtkIOPLY-8.2-gd.lib
vtkIOSegY-8.2-gd.lib
vtkIOSQL-8.2-gd.lib
vtkIOTecplotTable-8.2-gd.lib
vtkIOVeraOut-8.2-gd.lib
vtkIOVideo-8.2-gd.lib
vtkIOXML-8.2-gd.lib
vtkIOXMLParser-8.2-gd.lib
vtkjpeg-8.2-gd.lib
vtkjsoncpp-8.2-gd.lib
vtklibharu-8.2-gd.lib
vtklibxml2-8.2-gd.lib
vtklz4-8.2-gd.lib
vtklzma-8.2-gd.lib
vtkmetaio-8.2-gd.lib
vtkNetCDF-8.2-gd.lib
vtkogg-8.2-gd.lib
vtkParallelCore-8.2-gd.lib
vtkpng-8.2-gd.lib
vtkproj-8.2-gd.lib
vtkpugixml-8.2-gd.lib
vtkRenderingAnnotation-8.2-gd.lib
vtkRenderingContext2D-8.2-gd.lib
vtkRenderingContextOpenGL2-8.2-gd.lib
vtkRenderingCore-8.2-gd.lib
vtkRenderingExternal-8.2-gd.lib
vtkRenderingFreeType-8.2-gd.lib
vtkRenderingGL2PSOpenGL2-8.2-gd.lib
vtkRenderingImage-8.2-gd.lib
vtkRenderingLabel-8.2-gd.lib
vtkRenderingLOD-8.2-gd.lib
vtkRenderingOpenGL2-8.2-gd.lib
vtkRenderingVolume-8.2-gd.lib
vtkRenderingVolumeOpenGL2-8.2-gd.lib
vtksqlite-8.2-gd.lib
vtksys-8.2-gd.lib
vtktheora-8.2-gd.lib
vtktiff-8.2-gd.lib
vtkverdict-8.2-gd.lib
vtkViewsContext2D-8.2-gd.lib
vtkViewsCore-8.2-gd.lib
vtkViewsInfovis-8.2-gd.lib
vtkzlib-8.2-gd.lib
  1. C/C++ -> 预处理->预处理器定义:设置如下编译选项,避免不必要的编译错误。
_CRT_SECURE_NO_WARNINGS
BOOST_USE_WINDOWS_H
NOMINMAX
_CRT_SECURE_NO_DEPRECATE

注: 若需要libpcap

若需要用到libpcap库,即安装

WpdPack_4_1_2.zip, 编译时需要的头文件和库文件
WinPcap_4_1_3.exe, 包括运行时库

将两者都解压安装到目录C:/Program Files,并在上述配置头文件路径,库文件路径,库文件依赖时,分别添加下面三部分即可

C:\Program Files\WpdPack_4_1_2\WpdPack\Include

C:\Program Files\WpdPack_4_1_2\WpdPack\Lib\x64

wpcap.lib
ws2_32.lib

注: 若需要使用其他版本的PCL,VTK

若需要使用其他版本的PCL,VTK,那么在填写依赖库文件时,会有大量的文件名需要获取,以及debug/release版本需要区分。建议使用bat脚本的方式获取,如下。
参考: 批量获取文件名
win10安装PCL

@echo off
for %%I in (*.lib) do echo %%I>>all.txt
for %%I in (*d.lib) do echo %%I>>adebug.txt
for %%I in (*8.2.lib) do echo %%I>>arelease.txt
pause

根据需求修改匹配的版本号,将该bat脚本放置在库文件内运行即可。

2.Ubuntu环境下

我还是喜欢全家桶的方式一键安装的。

从0开始编译

拒绝从0开始编译,弄了两天头疼,问题比我头发还多,需要的可以参考大佬的:
PCL release
VTK release
完整流程

  1. ubuntu20.04下安装pcl
  2. Ubuntu20.04下从源码 安装/卸载 指定版本的PCL点云库

出现问题

  1. Cmake 编译安装 VTK-7.1.1 时CMake Error:Found unsuitable Qt version “xxx”
    这种情况是编译低版本的VTK时,默认的是Qt4,而系统的是Qt5。更改cmake的qt为5即可。
    cmake时qt版本问题
  2. 编译VTK时CMAKE中找不到Qt5X11Extras
    缺少了,安装即可sudo apt install libqt5x11extras5-dev
    Qt5X11Extras问题
  3. 直接在板子上编译PCL时直接卡死。算了吧
  4. io.h编译出错
    pcl/io/pcd_io.h代替pcl/io/io.h

方便快捷先进的一键安装

sudo apt install libpcl-dev

但是!因为Ubuntu中版本适配问题,不同Ubuntu版本执行该操作,会安装不同版本的PCL和VTK。如果是Ubuntu22的话…感受高版本PCL兼容问题的痛苦吧
可以先查看相应版本的信息 apt list libpcl-dev -a或者apt-cache policy libpcl-dev 知晓libpcl-dev的版本。

测试

按照这里的测试方式即可ubuntu20.04下安装pcl

或者

#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
int  main (int argc, char** argv)
{ 
    pcl::PointCloud<pcl::PointXYZ> cloud;   // Fill in the cloud data  
    cloud.width    = 5;  
    cloud.height   = 1;  
    cloud.is_dense = false;  
    cloud.points.resize (cloud.width * cloud.height);  
    for (std::size_t i = 0; i < cloud.points.size (); ++i) 
    {    
        cloud.points[i].x = 1024 * rand () / (RAND_MAX + 1.0f);    
        cloud.points[i].y = 1024 * rand () / (RAND_MAX + 1.0f);    
        cloud.points[i].z = 1024 * rand () / (RAND_MAX + 1.0f);
    }  
        pcl::io::savePCDFileASCII ("test_pcd.pcd", cloud);  
        std::cerr << "Saved " << cloud.points.size () << " data points to test_pcd.pcd." << std::endl;  
        for (std::size_t i = 0; i < cloud.points.size (); ++i)    
             std::cerr << "    " << cloud.points[i].x << " " << cloud.points[i].y << " " << cloud.points[i].z << std::endl;  
        return (0);
}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
安装PCL库可以按照以下步骤进行: 1. 首先,进入PCL源代码目录,执行以下命令: ``` cd pcl-pcl-1.9.1 ``` 2. 创建一个build目录,并进入该目录: ``` mkdir build cd build ``` 3. 在build目录中使用CMake进行配置: ``` cmake -DCMAKE_BUILD_TYPE=Release .. ``` 4. 使用make命令进行编译: ``` make -j2 ``` 5. 使用sudo权限安装PCL库: ``` sudo make -j2 install ``` 以上步骤安装PCL库到你的Linux系统中。请注意,这些步骤假设你已经安装了CMake和make等必要的工具,如果没有安装,你需要先安装它们。 另外,你还可以通过使用阿里镜像源来加速安装和下载速度。打开"Software & Updates",将下载源更改为阿里镜像。这样可以提高下载速度。 如果你需要在Clion中配置和运行PCL项目,可以按照以下步骤操作: 1. 首先,在终端中执行以下命令安装所需的依赖项: ``` sudo apt-get install build-essential ``` 2. 安装Clion(或其他IDE): ``` sudo snap install clion --classic ``` 3. 更新软件包列表: ``` sudo apt-get update ``` 4. 安装PCL库: ``` sudo apt install libpcl-dev ``` 5. 打开Clion并配置编译器。在设置(Settings)中,设置可用的编译器路径。 6. 创建一个新项目,并在CMakeList.txt文件中添加以下内容: ``` cmake_minimum_required(VERSION 3.17) project(ProjectName) set(CMAKE_CXX_STANDARD 14) find_package(PCL REQUIRED) include_directories(${PCL_INCLUDE_DIRS}) link_directories(${PCL_LIBRARY_DIRS}) add_definitions(${PCL_DEFINITIONS}) add_executable(ProjectName main.cpp) target_link_libraries (ProjectName ${PCL_LIBRARIES}) ``` 7. 配置完成后,你可以使用Clion来编写和运行PCL项目了。 希望以上步骤对你有帮助。如果有任何问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值