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

打印 上一主题 下一主题

主题 1623|帖子 1623|积分 4869

保举Linux其他软件安装
Ubuntu/Debian小白从零开始设置深度学习环境和各种软件库(显卡驱动、CUDA、CUDNN、Pytorch、OpenCv、PCL、Cmake …)【持续维护】
一、apt 软件包安装(pcl1.10.0保举)

使用apt安装方式,比力简单,但是版本不是最新的,一样平常Ubuntu20.04对应PCL1.10.0
详细检察下系统软件包里面opencv的版本
  1. apt search libpcl-dev
复制代码

  1. sudo apt update
  2. sudo apt upgrade
  3. # 安装依赖
  4. sudo apt-get install build-essential libboost-all-dev libeigen3-dev libflann-dev libvtk7-devlibavformat-dev libswscale-dev
  5. # 直接一键安装
  6. sudo apt install libpcl-dev
  7. sudo apt install libpcl-dev pcl-tools
复制代码
如果没有版本要求限制,此种安装方法比力快捷方便。
二、源码安装(pcl高版本)

2.1 安装依赖环境

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

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

  1. wget https://www.coin-or.org/download/source/metslib/metslib-0.5.3.tgz
  2. tar xzvf metslib-0.5.3.tgz
  3. cd metslib-0.5.3
  4. ./configure
  5. make -j`nproc`
  6. sudo make install
复制代码
2.1.2安装VTK

用来可视化终端
  1. #安装x11
  2. sudo apt-get install libx11-dev libxext-dev libxtst-dev libxrender-dev libxmu-dev libxmuu-dev
  3. #安装opengl
  4. sudo apt-get install build-essential libgl1-mesa-dev libglu1-mesa-dev
  5. #安装libglut-dev 此步不行的话 需要手动源码安装VTK
  6. sudo apt-get install freeglut3-dev
  7. sudo apt-get install libvtk7.1-qt libvtk7.1 libvtk7-qt-dev
复制代码
VTK官网:https://vtk.org/download/ 下载VTK-7.1.1.tar.g版本(本人看来很多帖子都是建议装7.1版本,暂不清楚缘故起因)
  1. tar -xzvf vtk-7.1.1.tar.gz
  2. cd vtk-7.1.1
  3. mkdir build && cd build
  4. #先配置下qt的版本改成5 再依次点击Configure Generate
  5. cmake-gui
  6. cmake ..
  7. make -j4
  8. sudo make install
复制代码
注意 Qt5UiPlugin_DIR的路径大概需要手动设置
2.2 编译安装PCL

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


  1. cd pcl-pcl-1.13.1
  2. mkdir build && cd build
  3. cmake .. \
  4.   -DCMAKE_BUILD_TYPE=None \
  5.   -DCMAKE_INSTALL_PREFIX=/usr/local \
  6.   -DCMAKE_PREFIX_PATH=/usr/lib/x86_64-linux-gnu \
  7.   -DFREETYPE_LIBRARY=/usr/lib/x86_64-linux-gnu/libfreetype.so \
  8.   -DBUILD_GPU=ON \
  9.   -DBUILD_apps=ON \
  10.   -DBUILD_simulation=ON \
  11.   -DBUILD_examples=ON
  12. # 一般这步容易出错
  13. make -j6
  14. #make install指令pcl项目文件 转到默认的路径/usr/include 下
  15. sudo make install
复制代码
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与系统默认路径库文件版本冲突缘故起因
  1. qmake -version
  2. dpkg -l | grep qt5  
复制代码

办理方法一: 退出当前环境
  1. conda deactivate
复制代码
办理方法二: 在使用编译的CMakeLists.txt文件里面添加一句话,让其指定搜索路径【保举】
  1. SET(CMAKE_PREFIX_PATH "/usr/lib/x86_64-linux-gnu/cmake")
复制代码
添加这句话,其他的库文件也会在系统目录里面探求;记得删除build里面所有建的环境,再次编译通过。
  1. sudo make clean
复制代码
办理方法三: 把有关anaconda3的设置环境注释掉
  1. gedit ~/.bashrc
  2. # 注释以下内容
  3. # __conda_setup="$('/home/xjc/anaconda3/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
  4. # if [ $? -eq 0 ]; then
  5. #     eval "$__conda_setup"
  6. # else
  7. #     if [ -f "/home/xjc/anaconda3/etc/profile.d/conda.sh" ]; then
  8. #         . "/home/xjc/anaconda3/etc/profile.d/conda.sh"
  9. #     else
  10. #         export PATH="/home/xjc/anaconda3/bin:$PATH"
  11. #     fi
  12. # fi
  13. # unset __conda_setup
  14. source ~/.bashrc
复制代码
安装完后,再把注释改回来
办理方法四: 在CMakeLists.txt设置单独版本查找路径
  1. find_package(Qt5 5.15 REQUIRED)
复制代码
办理方法五: 重新把库文件链接到指定需要的文件
  1. sudo apt-get install locate
  2. # 使用命令ldd定位libwayland-client.so.0当中,所依赖的ffi库
  3. $ ldd /lib/x86_64-linux-gnu/libwayland-client.so.0 | grep ffi
复制代码

检察下anaconda3/lib/和 /usr/lib/x86_64-linux-gnu/ 对应得库版本是否一致 ,如果不一样则修改
  1. locate libffi.so.7
  2. # 查看系统的libffi
  3. ll /lib/x86_64-linux-gnu/ | grep ffi
  4. # 查看Anaconda的libffi
  5. ll ~/anaconda3/lib/ | grep ffi
复制代码


我们看到两个库不一样,一个是7.1.0,一个是8.1.2 ,因此把anaconda下的libffi.so.7指向系统的7.1.0
  1. cd ~/anaconda3/lib/lib
  2. sudo rm libffi.so.7
  3. sudo ln -s /lib/x86_64-linux-gnu/libffi.so.7.1.0 libffi.so.7
  4. #再次查看
  5. ll ~/anaconda3/lib/ | grep ffi
复制代码

问题三: Sub-process /usr/bin/dpkg returned an error code (1) 修复安装包
  1. sudo apt-get update
  2. sudo apt-get upgrade
  3. # 尝试修复损坏的软件包
  4. sudo apt-get install -f
  5. sudo dpkg --configure -a
复制代码
2.4 添加环境变量

  1. # 源码编译时 配置环境变量
  2. export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
复制代码
使用nano文本编辑器打开.bashrc是隐藏的环境设置文件
  1. nano ~/.bashrc
  2. #滑动到末端,添加下面三段文本
  3. export PCL_DIR=/usr/local/lib/pcl
  4. export LD_LIBRARY_PATH=$PCL_DIR/lib
  5. export PKG_CONFIG_PATH=$PCL_DIR/lib/pkgconfig
  6. # 添加完后 先Ctrl+O保存,按Enter确定,再Ctrl+X退出nano编辑器
  7. # 更新环境变量配置文件
  8. source ~/.bashrc
复制代码
2.5 版本验证

  1. # 这里的1.x应替换为你安装的PCL版本号,例如1.10或1.12等
  2. pkg-config --cflags pcl_common-1.x  
  3. apt-cache show libpcl-dev
复制代码
如果输出了一些编译标志,说明PCL安装成功。
2.6 卸载pcl

  1. # apt 安装方式卸载
  2. sudo apt-get remove libpcl-dev
  3. sudo apt-get purge libpcl-dev
复制代码
  1. # 源码手动安装方式卸载 大致原理是搜索pcl字眼全部删除
  2. sudo rm -r build #把pcl1.xx的相应的文件夹删掉即可
  3. sudo rm -r /usr/include/pcl-1.13.1 /usr/share/pcl /usr/bin/pcl* /usr/lib/libpcl*
  4. sudo rm -r  /usr/libx86_64-linux-gnu/libpcl*
  5. sudo rm -r /usr/lib/x86_64-linux-gnu/cmake/pcl
复制代码
三、设置c++/pcl开发环境

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

  1. cmake_minimum_required(VERSION 3.0 FATAL_ERROR)
  2. project(pcl_demo)
  3. set(CMAKE_CXX_STANDARD 14) # 设置C++标准
  4. # 查找PCL包
  5. find_package(PCL  REQUIRED)
  6. include_directories(${PCL_INCLUDE_DIRS}) #PCL_INCLUDE_DIRS是系统自动命名,不要更改,添加PCL的头文件路径
  7. link_directories(${PCL_LIBRARY_DIRS}) # 添加PCL的库路径
  8. add_definitions(${PCL_DEFINITIONS}) # 添加编译选项 可选
  9. # 添加可执行文件
  10. add_executable(pcl_demo pcl_demo.cpp)
  11. # 链接PCL库
  12. target_link_libraries(pcl_demo ${PCL_LIBRARIES})
复制代码
pcl_demo.cpp程序,在vscode里面,#include <pcl/xxx.h>有波浪线告诫 是正常征象,无需紧张
  1. #include <iostream>
  2. #include <pcl/pcl_config.h>
  3. #include <pcl/point_types.h>
  4. #include <pcl/point_cloud.h>
  5. #include <iostream>
  6. #include <pcl/common/common_headers.h>
  7. #include <pcl/io/pcd_io.h>
  8. #include <pcl/visualization/pcl_visualizer.h>
  9. #include <pcl/visualization/cloud_viewer.h>
  10. #include <pcl/console/parse.h>
  11. int main() {
  12.     std::cout << "PCL version: " << PCL_VERSION_PRETTY << std::endl;
  13.     // 创建一个简单的点云对象来测试基本功能
  14.     pcl::PointCloud<pcl::PointXYZ> cloud;
  15.     std::cout << "Test PCL !" << std::endl;
  16.     pcl::PointCloud<pcl::PointXYZRGB>::Ptr point_cloud_ptr (new pcl::PointCloud<pcl::PointXYZRGB>);
  17.     uint8_t r(255), g(15), b(15);
  18.     for (float z(-1.0); z <= 1.0; z += 0.05) {
  19.         for (float angle(0.0); angle <= 360.0; angle += 5.0) {
  20.             pcl::PointXYZRGB point;
  21.             point.x = 0.5 * cosf (pcl::deg2rad(angle));
  22.             point.y = sinf (pcl::deg2rad(angle));
  23.             point.z = z;
  24.             uint32_t rgb = (static_cast<uint32_t>(r) << 16 | static_cast<uint32_t>(g) << 8 | static_cast<uint32_t>(b));
  25.             point.rgb = *reinterpret_cast<float*>(&rgb);
  26.             point_cloud_ptr->points.push_back (point);
  27.         }
  28.         if (z < 0.0) {
  29.             r -= 12;
  30.             g += 12;
  31.         }
  32.         else {
  33.             g -= 12;
  34.             b += 12;
  35.         }
  36.     }
  37.     point_cloud_ptr->width = (int) point_cloud_ptr->points.size ();
  38.     point_cloud_ptr->height = 1;
  39.     pcl::visualization::CloudViewer viewer ("test");
  40.     viewer.showCloud(point_cloud_ptr);
  41.     while (!viewer.wasStopped()){ };
  42.     // 如果代码执行到这里没有错误,说明PCL基本功能正常
  43.     std::cout << "PCL basic functionality test passed." << std::endl;
  44.     return 0;
  45. }
复制代码
  1. cd build
  2. cmake ..
  3. make
  4. ./pcl_demo
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

张国伟

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表