Ubuntu 18.04 安装 PCL 1.14.1

        在进行科研项目时,我们常常需要将 C++ 和 Python 结合起来编程。然而,每次将 PCL(Point Cloud Library)的内容添加到 CMakeLists.txt 文件中时都会报错。在深入分析后,我们推测可能是当前使用的 PCL 1.8 版本与现有程序不兼容。因此,我们决定尝试安装最新的 PCL 1.14.1 版本,以期望解决这些兼容性问题。

1. 卸载旧版本的 PCL

        首先,我们需要卸载系统中现有的 PCL 1.8 版本,以避免与新版本产生冲突。

sudo apt-get remove libpcl-dev

2. 安装依赖

sudo apt-get update  
sudo apt-get install git build-essential linux-libc-dev
sudo apt-get install cmake cmake-gui
sudo apt-get install libusb-1.0-0-dev libusb-dev libudev-dev
sudo apt-get install mpi-default-dev openmpi-bin openmpi-common 
sudo apt-get install libflann1.9 libflann-dev  #这里改成1.9
sudo apt-get install libeigen3-dev 
sudo apt-get install libboost-all-dev
sudo apt-get install libvtk7.1-qt libvtk7.1 libvtk7-qt-dev  # 这里用7.1 不要用8以上的
sudo apt-get install libqhull* libgtest-dev
sudo apt-get install freeglut3-dev pkg-config
sudo apt-get install libxmu-dev libxi-dev
sudo apt-get install mono-complete
sudo apt-get install openjdk-8-jdk openjdk-8-jre

# 安装OpenNI,OpenNI2
sudo apt-get install libopenni-dev 
sudo apt-get install libopenni2-dev

# 安装QT5:
sudo apt install qtcreator
sudo apt install qt5-default

# 安装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

中间提示选择Y/N的全部选Y

3.下载最新版本的PCL库并编译

git clone https://github.com/PointCloudLibrary/pcl.git 

或者

git clone https://gitee.com/mirrors/pcl.git

        如果需要指定版本,请你点击下面连接进行下载。

Releases · PointCloudLibrary/pcl · GitHubPoint Cloud Library (PCL). Contribute to PointCloudLibrary/pcl development by creating an account on GitHub.icon-default.png?t=N7T8https://github.com/PointCloudLibrary/pcl/releases例如:

        选择source.zip 

解压进入 pcl 文件夹: 

cd pcl
# 切换到指定版本v1.14.1再编译
# git checkout pcl-1.14.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


#也可以安装在自己指定的目录,如下所示(主要是改下安装空间):
cmake .. \
  -DCMAKE_BUILD_TYPE=None \
  -DCMAKE_INSTALL_PREFIX=~/Programs/lib/PCL1141 \
  -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

# Orin 切换到 MAXN POWER MODE
# 进行编译
make -j`nproc`

#编译完后,执行安装
sudo make install

 make -j`nproc`成功界面

sudo make install 成功界面 

问题1:

/usr/bin/ld: warning: //home/fairlee/anaconda3/lib/libicudata.so.73: unsupported GNU_PROPERTY_TYPE (5) type: 0xc0010001
/usr/bin/ld: warning: //home/fairlee/anaconda3/lib/libicudata.so.73: unsupported GNU_PROPERTY_TYPE (5) type: 0xc0010002
//home/fairlee/anaconda3/lib/libfontconfig.so.1: undefined reference to `FT_Done_MM_Var'
collect2: error: ld returned 1 exit status
tools/CMakeFiles/pcl_pcd_grabber_viewer.dir/build.make:170: recipe for target 'bin/pcl_pcd_grabber_viewer' failed
make[2]: *** [bin/pcl_pcd_grabber_viewer] Error 1
CMakeFiles/Makefile2:3197: recipe for target 'tools/CMakeFiles/pcl_pcd_grabber_viewer.dir/all' failed
make[1]: *** [tools/CMakeFiles/pcl_pcd_grabber_viewer.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....

解决方案:

        这个错误可能是由于系统中存在多个版本的库,而编译器使用了不兼容的版本。在这种情况下,Anaconda环境中的库可能与系统库冲突。因此,完全移除Anaconda的影响: 临时重命名你的Anaconda目录,以确保系统不会使用任何Anaconda的库:

        最后安装成功后,别忘了把文件名改回去!!!!!!!!!

4. 安装验证

CMakeLists.txt

cmake_minimum_required(VERSION 3.5 FATAL_ERROR)
project(pcl_version_check)

# 设置C++标准
set(CMAKE_CXX_STANDARD 14)

# 查找PCL包
find_package(PCL  REQUIRED)

# 添加PCL的头文件路径
include_directories(${PCL_INCLUDE_DIRS})

# 添加PCL的库路径
link_directories(${PCL_LIBRARY_DIRS})

# 添加编译选项
add_definitions(${PCL_DEFINITIONS})

# 添加可执行文件
add_executable(pcl_version_check pcl_version_check.cpp
        pcl_version_check.cpp)

# 链接PCL库
target_link_libraries(pcl_version_check ${PCL_LIBRARIES})

pcl_version_check.cpp 

#include <iostream>
#include <pcl/pcl_config.h>
#include <pcl/point_types.h>
#include <pcl/point_cloud.h>
#include <iostream>
#include <pcl/common/common_headers.h>
#include <pcl/io/pcd_io.h>
#include <pcl/visualization/pcl_visualizer.h>
#include <pcl/visualization/cloud_viewer.h>
#include <pcl/console/parse.h>


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;
}

结果

致谢

ubuntu 18.04 安装PCL 1.12.1_the following subsystems will not be built:-- visu-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/729804.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Linux】rouyiVue 项目部署全过程(含MySQL,Nginx等中间件部署)

查看nginx 进程命令 ps aux | grep server_name 1. 安装MySQL 1.1 下载压缩包 官网下载 1.2 解压 上传并解压好放在指定位置 创建soft文件夹 mkdir /soft上传文件&#xff0c;在该目录下再创建一个mysql文件夹&#xff0c;将安装包解压到新文件夹中 mkdir /soft/mysql-…

字符串函数的使用和模拟实现(四)

#include<string.h> int main() { char arr1[30]{“kongchao”}; char arr2[30]{“hello world”}; strncpy(arr2,arr1,9);//拷贝九个是因为第九个字节是’\0’ printf(“%s”,arr2); return 0; } strncpy函数模拟实现 #include<stdio.h> #include<a…

【前端vue3】TypeScrip-interface(接口)和对象类型

对象类型 定义对象需要用到interface&#xff08;接口&#xff09;&#xff0c;主要用来约束数据的类型满足格式 定义方式如下&#xff1a; interface Person {name: string;age: number; }如对象中与接口中的属性不一致会报错&#xff0c;必须保持一致 例如如下&#xff1a…

湖北建筑施工特种作业人员建筑起重信号司索工:年薪多少?

"湖北建筑施工特种作业人员建筑起重信号司索工&#xff1a;年薪多少&#xff1f;前景如何&#xff1f;" 2024湖北建筑施工特种作业人员建筑起重信号司索工 2024年湖北省建筑施工特种作业人员中的建筑起重信号司索工&#xff0c;是一项关键的工种&#xff0c;其在建筑…

让我来告诉初学者到底什么叫嵌入式系统?

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「嵌入式的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01;我们在刚刚开始学习电子学…

智慧校园的含义是什么

智慧校园&#xff0c;这一概念深深植根于现代科技土壤之中&#xff0c;是由人工智能、大数据、云计算等前沿技术深度融合所催生的教育领域革新典范。它不仅仅是一个物理空间&#xff0c;而是一个集成了智能感知、个性化服务、教育资源优化、未来教学模式、高效管理、便捷生活服…

用全志T113做了块多功能卡片电脑,成本只要60块

FunnyPi-T113是一款基于全志T113-S3/D1S处理器的完全开源多功能开发板&#xff0c;设计FunnyPi最初的目的是想借此T113卡片电脑来满足日常学习&#xff0c;并结合T113高效能和低功耗的特点&#xff0c;来满足像语音助手&#xff0c;智能家居屏幕、桌面摆件屏、博客服务器等嵌入…

【前端】[vue3] [uni-app] 组件样式击穿:deep

我是在开发uni-app时测试的思路&#xff0c;大家可以借鉴一下。 我这边测试的是uni组件&#xff0c;但是我觉得即便你用element-plus之类的&#xff0c;样式击穿的思路都相同。 我自定义了一个全局样式scss文件&#xff0c;并引入到了项目中。(如图) 利用vue3 中的 deep 方式…

极狐GitLab落户香港科学园并成功发布AI产品驭码CodeRider国际版

GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab &#xff1a;https://gitlab.cn/install?channelcontent&utm_sourcecsdn 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署…

虚函数 虚表指针

虚函数表和虚表指针 1&#xff0c;虚函数的含义 用virtual声明类的成员函数称之为虚函数 2&#xff0c;作用 用于实现多态 存在继承关系&#xff0c;子类继承父类 子类重写了父类的virtual function 子类以父类的指针或者引用的身份出现 3&#xff0c;虚函数的实现原理 其中的…

html渲染的文字样式大小不统一解决方案

React Hooks 封装可粘贴图片的输入框组件&#xff08;wangeditor&#xff09;_react 支持图片拖拽的输入框-CSDN博客 这篇文章中的wangediter可粘贴图片的输入框&#xff0c;输入的文字和粘贴的文字在dangerouslySetInnerHTML渲染后出现了字体不统一的情况 在html中右键检查可…

openppp2 控制台回显窗口输出内容详解

本文介绍 openppp2 的控制窗口回显内容&#xff0c;以LINUX平台为例子&#xff0c;其它平台大同小异&#xff0c;区别只是多了一些额外的输出选项内容&#xff0c;本文会在下面补充。 在本文开始之前请查阅关联内容&#xff1a;openppp2 命令行接口详解-CSDN博客 控制台客户端…

自学鸿蒙HarmonyOS的ArkTS语言<三>路由跳转及传参

【官方文档传送门】 一、导入模块 import router from ohos.router二、新增页面配置 三、常用api 1、跳转到应用内的指定页面 build() {Row() {Button(下一页).onClick(() > {router.pushUrl({url: pages/Index2,params: {name: test}})})}.height(100%)}2、用应用内的某…

大模型如何改变世界?李彦宏:未来至少一半人要学会“提问题“

2023年爆火的大模型&#xff0c;对我们来说意味着什么&#xff1f; 百度创始人、董事长兼CEO李彦宏认为&#xff0c;“大模型即将改变世界。” 5月26日&#xff0c;李彦宏参加了在北京举办的2023中关村论坛&#xff0c;发表了题为《大模型改变世界》的演讲。李彦宏认为&#…

Transformer中的Self-Attention和Multi-Head Attention

2017 Google 在Computation and Language发表 当时主要针对于自然语言处理&#xff08;之前的RNN模型记忆长度有限且无法并行化&#xff0c;只有计算完ti时刻后的数据才能计算ti1时刻的数据&#xff0c;但Transformer都可以做到&#xff09; 文章提出Self-Attention概念&…

LeYOLO 用于目标检测的新型可扩展和高效CNN架构 | 最新轻量化SOTA! 5GFLOP下无对手!

本改进已集成到 YOLOv8-Magic 框架。 论文地址:https://arxiv.org/pdf/2406.14239 代码地址:https://github.com/LilianHollard/LeYOLO/tree/main 在深度神经网络中,计算效率对于目标检测至关重要,尤其是在新型模型更倾向于速度而非计算效率(浮点运算次数,FLOP)的情况下…

Transformer1--self attention

目录 一、 Vector set as 输入二、 模型输出&#xff08;三种&#xff09;1 **n-to-n**2 n-to-13 n-to-m 三、self-attention1、问题引入2、self-attention3 self-attention 原理介绍 一、 Vector set as 输入 一段声音讯号&#xff1a; 图结构&#xff08;graph&#xff09;…

店员顾客起纠纷?EasyCVR+AI视频监控管理平台,助力连锁门店安全运营

近日&#xff0c;某品牌咖啡店店员与顾客起冲突登上了新闻热搜&#xff0c;一时间引发大量关注。随着门店完整的监控视频录像公开&#xff0c;大家才了解事情的原委&#xff0c;而并非网传的那样。 随着社会的进步和科技的发展&#xff0c;视频监控已成为各行各业不可或缺的安全…

红军九大技战法

一、动态对抗&#xff0c;线上社工持续信息追踪 发起攻击前&#xff0c;发起攻击前&#xff0c;尽可能多的搜集攻击目标信息&#xff0c;做到知己知彼&#xff0c;直击目标最脆弱的地方。攻击者搜集关于目标组织的人员信息、组织架构、网络资产、技术框架及安全措施信息&#x…

一分钟了解中小企业数字化转型如何进行?「建议收藏」

关于“中小企业数字化转型方法论”&#xff0c;其实网上已经有不少文章给出了一些方式方法&#xff0c;那么这里我再系统性的讲解一下。 一、中小企业为什么要实现数字化转型 首先要知道&#xff0c;中小企业为什么要实现数字化转型&#xff1f;当前&#xff0c;世界经济数字化…