首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

Ubuntu20.04安装pcl1.10.0 && pcl1.13.1 一文详细介绍安装步骤(带图)及报错解决

  • 25-04-24 11:41
  • 2831
  • 9438
blog.csdn.net

文章目录

  • 一、apt 软件包安装(pcl1.10.0推荐)
  • 二、源码安装(pcl高版本)
    • 2.1 安装依赖环境
      • 2.1.1安装基本依赖
      • 2.1.2安装metslib
      • 2.1.2安装VTK
    • 2.2 编译安装PCL
    • 2.3 报错解决
    • 2.4 添加环境变量
    • 2.5 版本验证
    • 2.6 卸载pcl
  • 三、配置c++/pcl开发环境

推荐Linux其他软件安装
Ubuntu/Debian小白从零开始配置深度学习环境和各种软件库(显卡驱动、CUDA、CUDNN、Pytorch、OpenCv、PCL、Cmake …)【持续维护】

一、apt 软件包安装(pcl1.10.0推荐)

使用apt安装方式,比较简单,但是版本不是最新的,一般Ubuntu20.04对应PCL1.10.0
具体查看下系统软件包里面opencv的版本

apt search libpcl-dev
  • 1

sudo apt update
sudo apt upgrade
# 安装依赖
sudo apt-get install build-essential libboost-all-dev libeigen3-dev libflann-dev libvtk7-devlibavformat-dev libswscale-dev
# 直接一键安装
sudo apt install libpcl-dev
sudo apt install libpcl-dev pcl-tools
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

如果没有版本要求限制,此种安装方法比较快捷方便。

二、源码安装(pcl高版本)

2.1 安装依赖环境

如果以下依赖还不行,那安装过程中,缺少什么安装什么;PCL依赖环境比较多,不要急,我们一个个来。

2.1.1安装基本依赖

sudo apt update
sudo apt upgrade
sudo apt-get install git build-essential linux-libc-dev cmake cmake-gui 
sudo apt-get install libusb-1.0-0-dev libusb-dev libudev-dev libeigen3-dev libboost-all-dev
sudo apt-get install libqhull* libgtest-dev freeglut3-dev pkg-config libxmu-dev libxi-dev mono-complete openjdk-8-jdk openjdk-8-jre
# flann ubuntu20.4对应1.9
sudo apt-get install libopenni-dev libopenni2-dev libflann1.9 libflann-dev
#安装qt5
sudo apt-get install qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools qtcreator
sudo apt install qt5-default
sudo apt-get install qttools5-dev
sudo apt install libqt5x11extras5-dev
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

2.1.2安装metslib

wget https://www.coin-or.org/download/source/metslib/metslib-0.5.3.tgz
tar xzvf metslib-0.5.3.tgz
cd metslib-0.5.3
./configure
make -j`nproc`
sudo make install
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

2.1.2安装VTK

用来可视化终端

#安装x11
sudo apt-get install libx11-dev libxext-dev libxtst-dev libxrender-dev libxmu-dev libxmuu-dev
#安装opengl
sudo apt-get install build-essential libgl1-mesa-dev libglu1-mesa-dev
#安装libglut-dev 此步不行的话 需要手动源码安装VTK
sudo apt-get install freeglut3-dev
sudo apt-get install libvtk7.1-qt libvtk7.1 libvtk7-qt-dev
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

VTK官网:https://vtk.org/download/ 下载VTK-7.1.1.tar.g版本(本人看来很多帖子都是建议装7.1版本,暂不清楚原因)

tar -xzvf vtk-7.1.1.tar.gz 
cd vtk-7.1.1
mkdir build && cd build
#先配置下qt的版本改成5 再依次点击Configure Generate
cmake-gui
cmake ..
make -j4
sudo make install
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

注意 Qt5UiPlugin_DIR的路径可能需要手动设置

2.2 编译安装PCL

pcl链接 Github 官网 目前最新版本是pcl-1.15.0,这里我们下载pcl-1.13.1

cd pcl-pcl-1.13.1 
mkdir build && cd build 
cmake .. \
  -DCMAKE_BUILD_TYPE=None \
  -DCMAKE_INSTALL_PREFIX=/usr/local \
  -DCMAKE_PREFIX_PATH=/usr/lib/x86_64-linux-gnu \
  -DFREETYPE_LIBRARY=/usr/lib/x86_64-linux-gnu/libfreetype.so \
  -DBUILD_GPU=ON \
  -DBUILD_apps=ON \
  -DBUILD_simulation=ON \
  -DBUILD_examples=ON 
# 一般这步容易出错
make -j6
#make install指令pcl项目文件 转到默认的路径/usr/include 下
sudo make install
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

cmake … 成功界面

make -j6 成功界面

安装成功完后,会在usr/local/include/文件中,出现pcl-1.13文件,包含头文件。

2.3 报错解决

问题一: make[2]: *** 没有规则可制作目标“/usr/lib/x86_64-linux-gnu/libpcl_apps.so

在这里插入图片描述
原因: 多个pcl版本安装冲突导致,删除没有删除干净,定位到pcl库文件已经大部分链接中断
解决办法: 一定要卸载干净,重新安装

问题二: anaconda3/lib/libQt5X11Extras.so.5: undefined reference to `qt_version_tag@Qt_5.15’ anaconda 与系统默认的冲突
原因: 既然是qt_version_tag的问题,说明是qmake的版本不兼容导致,即当前QT使用的qmake和系统实际指定的qmake版本不一致。查看系统默认的qmake版本,一般来说是系统与anaconda中的lib版本冲突。以后遇见 xxx.so: undefined reference to xxx 其实问题本质是anaconda3与系统默认路径库文件版本冲突原因

qmake -version
dpkg -l | grep qt5  
  • 1
  • 2


解决方法一: 退出当前环境

conda deactivate
  • 1

解决方法二: 在使用编译的CMakeLists.txt文件里面添加一句话,让其指定搜索路径【推荐】

SET(CMAKE_PREFIX_PATH "/usr/lib/x86_64-linux-gnu/cmake")
  • 1

添加这句话,其他的库文件也会在系统目录里面寻找;记得删除build里面所有建的环境,再次编译通过。

sudo make clean
  • 1

解决方法三: 把有关anaconda3的配置环境注释掉

gedit ~/.bashrc
# 注释以下内容
# __conda_setup="$('/home/xjc/anaconda3/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
# if [ $? -eq 0 ]; then
#     eval "$__conda_setup"
# else
#     if [ -f "/home/xjc/anaconda3/etc/profile.d/conda.sh" ]; then
#         . "/home/xjc/anaconda3/etc/profile.d/conda.sh"
#     else
#         export PATH="/home/xjc/anaconda3/bin:$PATH"
#     fi
# fi
# unset __conda_setup
source ~/.bashrc
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

安装完后,再把注释改回来

解决方法四: 在CMakeLists.txt设置单独版本查找路径

find_package(Qt5 5.15 REQUIRED)
  • 1

解决方法五: 重新把库文件链接到指定需要的文件

sudo apt-get install locate
# 使用命令ldd定位libwayland-client.so.0当中,所依赖的ffi库
$ ldd /lib/x86_64-linux-gnu/libwayland-client.so.0 | grep ffi
  • 1
  • 2
  • 3

在这里插入图片描述
查看下anaconda3/lib/和 /usr/lib/x86_64-linux-gnu/ 对应得库版本是否一致 ,如果不一样则修改

locate libffi.so.7
# 查看系统的libffi
ll /lib/x86_64-linux-gnu/ | grep ffi
# 查看Anaconda的libffi
ll ~/anaconda3/lib/ | grep ffi
  • 1
  • 2
  • 3
  • 4
  • 5



我们看到两个库不一样,一个是7.1.0,一个是8.1.2 ,因此把anaconda下的libffi.so.7指向系统的7.1.0

cd ~/anaconda3/lib/lib
sudo rm libffi.so.7
sudo ln -s /lib/x86_64-linux-gnu/libffi.so.7.1.0 libffi.so.7
#再次查看
ll ~/anaconda3/lib/ | grep ffi
  • 1
  • 2
  • 3
  • 4
  • 5

问题三: Sub-process /usr/bin/dpkg returned an error code (1) 修复安装包

sudo apt-get update
sudo apt-get upgrade
# 尝试修复损坏的软件包
sudo apt-get install -f
sudo dpkg --configure -a
  • 1
  • 2
  • 3
  • 4
  • 5

2.4 添加环境变量

# 源码编译时 配置环境变量
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
  • 1
  • 2

使用nano文本编辑器打开.bashrc是隐藏的环境配置文件

nano ~/.bashrc
#滑动到末端,添加下面三段文本
export PCL_DIR=/usr/local/lib/pcl
export LD_LIBRARY_PATH=$PCL_DIR/lib
export PKG_CONFIG_PATH=$PCL_DIR/lib/pkgconfig
# 添加完后 先Ctrl+O保存,按Enter确定,再Ctrl+X退出nano编辑器
# 更新环境变量配置文件
source ~/.bashrc
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

2.5 版本验证

# 这里的1.x应替换为你安装的PCL版本号,例如1.10或1.12等
pkg-config --cflags pcl_common-1.x  
apt-cache show libpcl-dev
  • 1
  • 2
  • 3

如果输出了一些编译标志,说明PCL安装成功。

2.6 卸载pcl

# apt 安装方式卸载
sudo apt-get remove libpcl-dev
sudo apt-get purge libpcl-dev
  • 1
  • 2
  • 3
# 源码手动安装方式卸载 大致原理是搜索pcl字眼全部删除
sudo rm -r build #把pcl1.xx的相应的文件夹删掉即可
sudo rm -r /usr/include/pcl-1.13.1 /usr/share/pcl /usr/bin/pcl* /usr/lib/libpcl*
sudo rm -r  /usr/libx86_64-linux-gnu/libpcl*
  • 1
  • 2
  • 3
  • 4

三、配置c++/pcl开发环境

使用CMakeLists.txt配置pcl。创建一个文件夹,文件夹下包含:build文件夹、pcl_demo.cpp程序、CMakeLists.txt。

cmake_minimum_required(VERSION 3.0 FATAL_ERROR)
project(pcl_demo) 
set(CMAKE_CXX_STANDARD 14) # 设置C++标准
# 查找PCL包
find_package(PCL  REQUIRED) 
include_directories(${PCL_INCLUDE_DIRS}) #PCL_INCLUDE_DIRS是系统自动命名,不要更改,添加PCL的头文件路径
link_directories(${PCL_LIBRARY_DIRS}) # 添加PCL的库路径
add_definitions(${PCL_DEFINITIONS}) # 添加编译选项 可选
# 添加可执行文件
add_executable(pcl_demo pcl_demo.cpp) 
# 链接PCL库
target_link_libraries(pcl_demo ${PCL_LIBRARIES})
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

pcl_demo.cpp程序,在vscode里面,#include 有波浪线警告 是正常现象,无需紧张

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include  
int main() {
    std::cout << "PCL version: " << PCL_VERSION_PRETTY << std::endl; 
    // 创建一个简单的点云对象来测试基本功能
    pcl::PointCloud<pcl::PointXYZ> cloud;
    std::cout << "Test PCL !" << std::endl;
    pcl::PointCloud<pcl::PointXYZRGB>::Ptr point_cloud_ptr (new pcl::PointCloud<pcl::PointXYZRGB>);
    uint8_t r(255), g(15), b(15);
    for (float z(-1.0); z <= 1.0; z += 0.05) {
        for (float angle(0.0); angle <= 360.0; angle += 5.0) {
            pcl::PointXYZRGB point;
            point.x = 0.5 * cosf (pcl::deg2rad(angle));
            point.y = sinf (pcl::deg2rad(angle));
            point.z = z;
            uint32_t rgb = (static_cast<uint32_t>(r) << 16 | static_cast<uint32_t>(g) << 8 | static_cast<uint32_t>(b));
            point.rgb = *reinterpret_cast<float*>(&rgb);
            point_cloud_ptr->points.push_back (point);
        }
        if (z < 0.0) {
            r -= 12;
            g += 12;
        }
        else {
            g -= 12;
            b += 12;
        }
    } 
    point_cloud_ptr->width = (int) point_cloud_ptr->points.size ();
    point_cloud_ptr->height = 1;
 
    pcl::visualization::CloudViewer viewer ("test");
    viewer.showCloud(point_cloud_ptr);
    while (!viewer.wasStopped()){ };
 
    // 如果代码执行到这里没有错误,说明PCL基本功能正常
    std::cout << "PCL basic functionality test passed." << std::endl; 
    return 0;
}
  • 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
cd build
cmake .. 
make
./pcl_demo
  • 1
  • 2
  • 3
  • 4

注:本文转载自blog.csdn.net的AI坤哥哥的文章"https://blog.csdn.net/qq_61812715/article/details/146041776"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

120
运维
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2024 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top