Ubuntu下安装PCL点云库经验分享

  • 内容简介
  • 安装ubuntu
  • VMware全屏下不完全显示
  • 换国内镜像源
  • 安装VTK
    • 问题一
    • 问题二
  • 安装PCL
  • 配置vscode
    • c_cpp_properties.json
    • launch.json
    • tasks.json
  • CMake编译
  • xshell连接ubuntu
  • 总结

内容简介

本文主要分享我在Ubuntu下安装PCL点云库的经验,这里我用的ubuntu是22.04版本,依赖库基本都下载的新的,VTK版本是8.2(建议不要使用更新版本),PCL版本是1.12.1。

安装ubuntu

这里建议安装虚拟机,可以参照ubuntu20.04安装教程进行安装,需要注意的是安装时候要分配足够的磁盘空间,因为如果后面扩展磁盘空间的话会比较麻烦,扩展硬盘空间可以参照扩展磁盘进行操作,建议不要走到这一步。

VMware全屏下不完全显示

这里参考VMware虚拟机不能全屏的解决办法进行操作,也就是将设置中的分辨率改一下。

换国内镜像源

有了ubuntu之后首先要做的就是换上国内的镜像源,这里可以参照Ubuntu换源的两种方法进行操作,这样能使我们的下载速度得到明显提升。

安装VTK

这里参照Ubuntu18安装VTK8.2进行操作,但是make时候出现了问题。

问题一

[ 87%] Linking C shared library ../../../lib/libvtkexodusII-8.2.so
/usr/bin/ld: CMakeFiles/vtkexodusII.dir/src/ex_open_par.c.o:/home/littlez/下载/Software/VTK-8.2.0/ThirdParty/exodusII/vtkexodusII/src/ex_open_par.c:477: multiple definition of `exodus_unused_symbol_dummy_1'; CMakeFiles/vtkexodusII.dir/src/ex_create_par.c.o:/home/littlez/下载/Software/VTK-8.2.0/ThirdParty/exodusII/vtkexodusII/src/ex_create_par.c:617: first defined here
collect2: error: ld returned 1 exit status
make[2]: *** [ThirdParty/exodusII/vtkexodusII/CMakeFiles/vtkexodusII.dir/build.make:4436:lib/libvtkexodusII-8.2.so.1] 错误 1
make[1]: *** [CMakeFiles/Makefile2:5836:ThirdParty/exodusII/vtkexodusII/CMakeFiles/vtkexodusII.dir/all] 错误 2
make: *** [Makefile:136:all] 错误 2

可以看到这是multiple definition of ‘exodus_unused_symbol_dummy_1’,处理办法也是简单粗暴,找到其中一个定义,然后注释掉。

问题二

[ 99%] Building CXX object Rendering/Qt/CMakeFiles/vtkRenderingQt.dir/vtkQtLabelRenderStrategy.cxx.o
/home/littlez/下载/Software/VTK-8.2.0/Rendering/Qt/vtkQtLabelRenderStrategy.cxx: In member function ‘virtual void vtkQtLabelRenderStrategy::ComputeLabelBounds(vtkTextProperty*, vtkUnicodeString, double*)’:
/home/littlez/下载/Software/VTK-8.2.0/Rendering/Qt/vtkQtLabelRenderStrategy.cxx:229:18: error: aggregate ‘QPainterPath path’ has incomplete type and cannot be defined229 |     QPainterPath path;|                  ^~~~
/home/littlez/下载/Software/VTK-8.2.0/Rendering/Qt/vtkQtLabelRenderStrategy.cxx: In member function ‘virtual void vtkQtLabelRenderStrategy::RenderLabel(int*, vtkTextProperty*, vtkUnicodeString, int)’:
/home/littlez/下载/Software/VTK-8.2.0/Rendering/Qt/vtkQtLabelRenderStrategy.cxx:331:16: error: aggregate ‘QPainterPath path’ has incomplete type and cannot be defined331 |   QPainterPath path;|                ^~~~
/home/littlez/下载/Software/VTK-8.2.0/Rendering/Qt/vtkQtLabelRenderStrategy.cxx: In member function ‘virtual void vtkQtLabelRenderStrategy::RenderLabel(int*, vtkTextProperty*, vtkUnicodeString)’:
/home/littlez/下载/Software/VTK-8.2.0/Rendering/Qt/vtkQtLabelRenderStrategy.cxx:442:18: error: aggregate ‘QPainterPath path’ has incomplete type and cannot be defined442 |     QPainterPath path;|                  ^~~~
make[2]: *** [Rendering/Qt/CMakeFiles/vtkRenderingQt.dir/build.make:104:Rendering/Qt/CMakeFiles/vtkRenderingQt.dir/vtkQtLabelRenderStrategy.cxx.o] 错误 1
make[1]: *** [CMakeFiles/Makefile2:7066:Rendering/Qt/CMakeFiles/vtkRenderingQt.dir/all] 错误 2
make: *** [Makefile:136:all] 错误 2

以及

[ 99%] Building CXX object Rendering/Qt/CMakeFiles/vtkRenderingQt.dir/vtkQtStringToImage.cxx.o
/home/littlez/下载/Software/VTK-8.2.0/Rendering/Qt/vtkQtStringToImage.cxx: In member function ‘virtual vtkVector2i vtkQtStringToImage::GetBounds(vtkTextProperty*, const vtkUnicodeString&, int)’:
/home/littlez/下载/Software/VTK-8.2.0/Rendering/Qt/vtkQtStringToImage.cxx:109:16: error: aggregate ‘QPainterPath path’ has incomplete type and cannot be defined109 |   QPainterPath path;|                ^~~~
/home/littlez/下载/Software/VTK-8.2.0/Rendering/Qt/vtkQtStringToImage.cxx: In member function ‘virtual vtkVector2i vtkQtStringToImage::GetBounds(vtkTextProperty*, const vtkStdString&, int)’:
/home/littlez/下载/Software/VTK-8.2.0/Rendering/Qt/vtkQtStringToImage.cxx:140:16: error: aggregate ‘QPainterPath path’ has incomplete type and cannot be defined140 |   QPainterPath path;|                ^~~~
/home/littlez/下载/Software/VTK-8.2.0/Rendering/Qt/vtkQtStringToImage.cxx: In member function ‘virtual int vtkQtStringToImage::RenderString(vtkTextProperty*, const vtkUnicodeString&, int, vtkImageData*, int*)’:
/home/littlez/下载/Software/VTK-8.2.0/Rendering/Qt/vtkQtStringToImage.cxx:187:16: error: aggregate ‘QPainterPath path’ has incomplete type and cannot be defined187 |   QPainterPath path;|                ^~~~
make[2]: *** [Rendering/Qt/CMakeFiles/vtkRenderingQt.dir/build.make:118:Rendering/Qt/CMakeFiles/vtkRenderingQt.dir/vtkQtStringToImage.cxx.o] 错误 1
make[1]: *** [CMakeFiles/Makefile2:7066:Rendering/Qt/CMakeFiles/vtkRenderingQt.dir/all] 错误 2
make: *** [Makefile:136:all] 错误 2

这里就是aggregate ‘QPainterPath path’ has incomplete type and cannot be defined 处理办法也是简单地在对应文件中加入

#includ <QPainterPath>

这样算是能完成编译,后续如有问题还会更新。

安装PCL

接下来要做的就是安装PCL了,这里可以参照ubuntu18.04 安装pcl(详细教程)进行操作,目前还没遇到问题,能完成下载,后续使用一段时间后再来分享。这里有条命令分享一下:

sudo apt-cache search libxxx #查看libxxx可供下载的版本

在编译VTK和PCL时我们一般会用多线程同时编译以节省时间,也就是

make -j2 #这里的2就代表编译所用的线程数

然而这也会带来很大的内存开销,当内存不足时,make就会闪退,以我的实际经历来说,给了虚拟机8G内存,开两个线程make,结果还是会内存爆掉,只开一个线程才能正常make过去。

配置vscode

配置C++环境可以参照vscode环境中配置C++环境,配置PCL则可以参照vscode配置OpenCV+PCL进行操作,但是由于PCL为1.12.1版本,VTK为8.2版本,这里在配置时c_cpp_properties.jsonlaunch.jsontasks.json都需要一定的修改,这里我是按如下进行设置。

注意:这里的配置还不完善,仅供参考。

c_cpp_properties.json

{"configurations": [{"name": "Linux","includePath": ["${workspaceFolder}/**","${workspaceFolder}","/usr/local/include/pcl-1.12","/usr/include","/usr/include/vtk-7.1","/usr/include/libqhull","/usr/include/flann","/usr/include/boost","/usr/include/eigen3","/usr/include/eigen3/Eigen/","/usr/include/x86_64-linux-gnu/sys"],"defines":[],"browse": {"path": ["/usr/include","/usr/local/include/pcl-1.12"]},"compilerPath": "/usr/bin/gcc","cStandard": "gnu11","cppStandard": "gnu++14","intelliSenseMode": "clang-x64"// "cStandard": "gnu17",// "cppStandard": "gnu++17",// "intelliSenseMode": "linux-gcc-x64"}],"version": 4
}

launch.json

{// Use IntelliSense to learn about possible attributes.// Hover to view descriptions of existing attributes.// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387"version": "0.2.0","configurations": [{"name": "(gdb) 启动","type": "cppdbg","request": "launch",// "program": "${workspaceFolder}/${fileBasenameNoExtension}.out","program": "${workspaceFolder}/main.out","miDebuggerPath": "/usr/bin/gdb","preLaunchTask": "build","args": [],"stopAtEntry": false,"cwd": "${workspaceFolder}","environment": [],"externalConsole": true,"MIMode": "gdb","setupCommands": [{"description": "为 gdb 启用整齐打印","text": "-enable-pretty-printing","ignoreFailures": true}]}]
}

tasks.json

{// See https://go.microsoft.com/fwlink/?LinkId=733558// for the documentation about the tasks.json format"version": "2.0.0","tasks": [{"label": "build","type": "shell","command":"g++","args": ["-g","${workspaceFolder}/${fileBasename}","-I","/usr/local/include/pcl-1.12","-I","/usr/include/eigen3","-I","/usr/include/vtk-7.1","-I","/usr/include/libqhull","-I","/usr/include/flann","-I","/usr/include/boost","-L","/usr/local/lib","-l","pcl_io","-l","pcl_visualization","-l","pcl_common",// "-l","vtkFiltering",// "-l","vtkCommon",// "-l","vtkRendering",// "-l","vtkGraphics","-l","vtkFiltersCore-8.2","-l","vtkCommonCore-8.2","-l","vtkRenderingCore-8.2","-l","vtkGeovisCore-8.2","-I","/usr/include/x86_64-linux-gnu","-l","boost_system","-o","${workspaceFolder}/main.out"],"group":{"kind": "build","isDefault": true}}// ,// {//     "label": "build",//     "type": "shell",//     "command": "g++",//     "args": ["-g","${file}","-o","${fileBasenameNoExtension}.out"]// }]
}

这里尤其需要注意的是tasks.json文件,本质上就是把命令行要输入的命令写在这个文件里了,有兴趣的朋友可以参考一下Linux下G++编译。

用以上文件内容替换其他配置教程中对应文件中的内容,再按照教程里操作步骤进行操作即可将代码编译通过,生成可执行程序。

CMake编译

相比配置VScode来编译代码,用cmake来编译可能才是更多人的选择。可以参考PCL配置,这里也简单介绍一下。

就是先在工程的文件夹中新建一个CMakeLists.txt,内容根据自己的需要来填,如:

cmake_minimum_required(VERSION 3.0)
project(testpcl)find_package(PCL 1.2 REQUIRED)include_directories(${PCL_INCLUDE_DIRS})
link_directories(${PCL_LIBRARY_DIRS})
add_definitions(${PCL_DEFINITIONS})
add_executable(testpcl testpcl.cpp)
target_link_libraries (testpcl ${PCL_LIBRARIES})
install(TARGETS testpcl RUNTIME DESTINATION bin)

然后在终端中依次输入:

mkdir build
cd build
cmake ..
make
./testpcl #注意这里要根据实际填写

这样能完成编译并执行生成的可执行程序,这里在执行可执行文件的时候还遇到了一个问题。

littlez@littlez-virtual-machine:~/Learn/build$ ./testpcl
./testpcl: error while loading shared libraries: libvtkfreetype-8.2.so.1: cannot open shared object file: No such file or directory

这里参照解决可执行文件运行时报错及export LD_LIBRARY_PATH 的使用里的内容,在 ~ 路径下的 .bashrc 文件中加入下面语句

export LD_LIBRARY_PATH=LD_LIBRARY_PATH:/usr/local/lib

这样就能正常执行可执行文件了,以下是测试结果。

xshell连接ubuntu

为解决主机与虚拟机之间文件传输问题,这里我们使用xshell和xftp来实现,具体流程可以参照xshell连接ubuntu。

总结

泪目了,家人们!

这里要说的就是,make时候心中默念“佛祖保佑”,这样可以给cmake加buff(不是)。遇到困难不要怕,微笑地面对她!如果真的遇到问题,要相信我所走过的坑前人一定都走过,细心一点,看是报了什么错,然后去搜答案抄作业。如果真遇到了前人没踩过的坑,那就勇于做第一个踩坑人吧~~~

以上内容希望能给各位提供一定参考,最后祝各位都能successful !!!

Ubuntu下安装PCL1.12.1点云库经验分享相关推荐

  1. Ubuntu下安装Python的Tkinter和Pmw库

    在Linux下,如果需要编写界面应用,并且此界面应用对性能的要求不是很高,一般可以使用Python解决.Python中可以使用自带的Tkinter库或者是第三方的Wxpython库,当然Tkinter ...

  2. Ubuntu下安装Nginx,PHP5(及PHP-FPM),MySQL

     Ubuntu下安装Nginx,PHP5(及PHP-FPM),MySQL 2012-09-15 11:12:31 标签:php mysql ubuntu nginx php-fpm 原创作品,允许转载 ...

  3. Ubuntu下安装Qt全部过程

    Ubuntu下安装Qt全部过程 (2013-03-04 22:12:02) 转载▼   分类:ARM Linux 1.到官网http://qt-project.org/downloads或者ftp:/ ...

  4. Ubuntu下安装Wine可能导致假死问题解决方案

    Ubuntu下安装Wine可能导致假死问题解决方案 出现问题 在使用Ubuntu使用apt-get install wine时,导致下载处于假死状态,不论将dpkg命令杀死,还是按照提示sudo ap ...

  5. Ubuntu下安装Oracle11g(图文教程)

    由于课程需要,要在Ubuntu下安装一个Oracle,之前都没有装过,所以想通过这篇博文记录一下 1.下载Oracle 11g 下载地址:http://www.oracle.com/technetwo ...

  6. 虚拟机VMware的Ubuntu下安装tensorflow详解

    这里笔者已经安装好了虚拟机并安装了Ubuntu系统,并且虚拟机可以联网,因此就直接开始介绍下面的步骤.网上博文很乱,特意整理,以供参考. 虚拟机VMware的Ubuntu下安装tensorflow详解 ...

  7. ubuntu下安装PCL并测试(含视频安装过程记录)

    ☛☛ 视频安装过程记录 ☚☚ 原文章的标题为Ubuntu16.04下安装PCL1.7并测试(含视频安装过程记录),但我觉得随着时间的推移,版本会发生改变 1.更新源 sudo apt-get upda ...

  8. ubuntu下安装pythoncharm_Ubuntu下安装、激活并配置Pycharm

    Ubuntu下安装.激活并配置Pycharm 最近在学习Python这门语言,到了需要Python编译器学习的阶段,通过网上了解各个Python编译器的优缺点,最后选择了pycharm作为Python ...

  9. ubuntu下安装网易云音乐

    ubuntu下安装网易云音乐 端午休息,闲着无聊,准备通过docker源码搭建一套greenplum的调试环境,方便后续工作时调试使用,可是,神说,要有音乐,于是,有了下面的小记,好吧,我承认只是我无 ...

最新文章

  1. python打开json文件变为字典_Python json读写方式和字典相互转化
  2. 2020年12月大学英语四六级英语作文预测(XDF王江涛)
  3. 30KVA UPS电源安装电线的配置
  4. ASP.NET MVC Beta 新特性之 IValueProvider
  5. DataWorks数据建模公开课上线啦!
  6. 需求更大的--if条件判断
  7. SpringBoot支持JSP教程
  8. (转载)PHP环境搭建-记录
  9. idea启动报错,插件报错:internal error please refre to http://jb.gg/ide/critical-starup-error
  10. android屏幕漂移,手机屏幕不受控制乱跳 触屏“飘逸”的解决方法
  11. 关于0.96OLED的显示过程详解(I2C通信方式)
  12. python语言是不是胶水语言_不会吧,不会吧,不会还有人觉得Python是胶水语言吧?...
  13. 古体字与简体字对照表_王力_简体字与繁体字对照表
  14. linux的核心安装下的命令行,linux lilo命令参数及用法详解--linux安装核心载入,开机管理程...
  15. java写一个发红包_Java实现微信发红包
  16. 孕妇饮食禁忌隐私政策
  17. 什么是位移电流?位移电流密度计算公式详解
  18. Maven依赖编译失败报错:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile
  19. JavaWeb - 小米商城:商品添加到购物车
  20. StatsD与Graphite联合作战

热门文章

  1. 2021年起重机司机(限桥式起重机)考试题库及起重机司机(限桥式起重机)新版试题
  2. Windows11分辨率无法调整,缩放不能选择调整
  3. python-长宽不同多张图片生成一列长图
  4. window自带的常见工具
  5. HAL库自学笔记#2【PWM】
  6. python token_python 产生token及token验证的方法
  7. Excel在数字单元格后面怎么添加统一的内容(数字或其他内容)
  8. 【校园网故障】HTTP ERROP 502和DNS PROBE STARTED、DNS Probe Finished No Internet的解决方法
  9. 准备注册网易企业邮箱,安全功能怎么样?
  10. UVa 12112 - Iceman