关于ros中pcl_ros和ros链接问题Makefile:140的一种解决方案

2023-05-16

本人在ros学习pcl和slam过程中,使用catkin_make进行编译,最终只报了错误Makefile:140make -j4 -l4错误,诸如此类错误,多为链接过程出现问题。坑多日,总结经验。


文章目录

  • 原因一:关于pcl_ros和ros的链接问题
    • pcl和vtk源码安装
  • 原因二:关于pcl库内部动态库链接问题
    • 1.命令安装以及验证程序参考以下链接:
    • 2.1问题解决
      • 2执行`make -j4 -l4`报错:
        • 2.1.1查找`libGL.so`位置
        • 2.1.2造一个libGL.so
        • 2.1.3 重新链接动态库/usr/lib/x86_64-linux-gnu/libGL.so


原因一:关于pcl_ros和ros的链接问题

pcl和vtk源码安装

对应不同的ros版本,按照ros官网进行安装,pcl和vtk已经集成在ros中,但是在实际使用过程中,例如visualizationqt5的使用过程中会发生版本链接冲突。本人使用ubuntu18.04中pcl1.8搭配vtk6.8在构建visualization工程过程中发生版本冲突。参考博客a、博客b,和博客c进行对应版本的ubuntu进行源码安装。
提示:建议结合以上3个链接进行源码安装


原因二:关于pcl库内部动态库链接问题

本人在构建含有pcl的工程中,多次修改cmakelist文件,关于pcl库版本、路径的修改以及vtk的配置,但是好像治标不治本。那就整整库的问题吧!

1.命令安装以及验证程序参考以下链接:

pcl命令安装参考[博客],编译过程使用cmake和工具构建工程oh-my-zsh(替换bash工具的神具){安装}{配置},不要使用ros工具catkin_make,如果仍然重装了pcl库仍未解决问题,接着往下看。

2.1问题解决

2执行make -j4 -l4报错:

make[2]: *** 没有规则可制作目标“/usr/lib/x86_64-linux-gnu/libGL.so”,
由“pcl_test” 需求。 停止。
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/pcl_test.dir/all' failed
make[1]: *** [CMakeFiles/pcl_test.dir/all] Error 2
Makefile:83: recipe for target 'all' failed
make: *** [all] Error 2

好了,问题就出现在libGL.so动态链接库,原因可能是在装cuda、qt5过程中软件本身的动态库抢占了优先配偶权。那么,解决libGL.so问题。

2.1.1查找libGL.so位置

方法a:

sudo find / -iname "*libGL.so*"

查询结果:

/snap/gnome-3-38-2004/87/usr/lib/x86_64-linux-gnu/libGL.so
/snap/gnome-3-38-2004/87/usr/lib/x86_64-linux-gnu/libGL.so.1
/snap/gnome-3-38-2004/87/usr/lib/x86_64-linux-gnu/libGL.so.1.7.0
/snap/gnome-3-38-2004/99/usr/lib/x86_64-linux-gnu/libGL.so
/snap/gnome-3-38-2004/99/usr/lib/x86_64-linux-gnu/libGL.so.1
/snap/gnome-3-38-2004/99/usr/lib/x86_64-linux-gnu/libGL.so.1.7.0
/snap/gnome-3-34-1804/77/usr/lib/x86_64-linux-gnu/libGL.so
/snap/gnome-3-34-1804/77/usr/lib/x86_64-linux-gnu/libGL.so.1
/snap/gnome-3-34-1804/77/usr/lib/x86_64-linux-gnu/libGL.so.1.0.0
/snap/gnome-3-34-1804/72/usr/lib/x86_64-linux-gnu/libGL.so
/snap/gnome-3-34-1804/72/usr/lib/x86_64-linux-gnu/libGL.so.1
/snap/gnome-3-34-1804/72/usr/lib/x86_64-linux-gnu/libGL.so.1.0.0
/usr/lib/x86_64-linux-gnu/libGL.so.1
/usr/lib/x86_64-linux-gnu/libGL.so.1.0.0
/usr/lib/x86_64-linux-gnu/libGL.so

但是实际/usr/lib/x86_64-linux-gnu/libGL.so并不真是存在。
方法b:

sudo locate libGL.so

查询结果:

/snap/gnome-3-34-1804/72/usr/lib/x86_64-linux-gnu/libGL.so
/snap/gnome-3-34-1804/72/usr/lib/x86_64-linux-gnu/libGL.so.1
/snap/gnome-3-34-1804/72/usr/lib/x86_64-linux-gnu/libGL.so.1.0.0
/snap/gnome-3-34-1804/77/usr/lib/x86_64-linux-gnu/libGL.so
/snap/gnome-3-34-1804/77/usr/lib/x86_64-linux-gnu/libGL.so.1
/snap/gnome-3-34-1804/77/usr/lib/x86_64-linux-gnu/libGL.so.1.0.0
/snap/gnome-3-38-2004/87/usr/lib/x86_64-linux-gnu/libGL.so
/snap/gnome-3-38-2004/87/usr/lib/x86_64-linux-gnu/libGL.so.1
/snap/gnome-3-38-2004/87/usr/lib/x86_64-linux-gnu/libGL.so.1.7.0
/snap/gnome-3-38-2004/99/usr/lib/x86_64-linux-gnu/libGL.so
/snap/gnome-3-38-2004/99/usr/lib/x86_64-linux-gnu/libGL.so.1
/snap/gnome-3-38-2004/99/usr/lib/x86_64-linux-gnu/libGL.so.1.7.0
/usr/lib/x86_64-linux-gnu/libGL.so.1
/usr/lib/x86_64-linux-gnu/libGL.so.1.0.0

方法c:
安装工具,该工具可用于查找某文件所属的软件包(包括远程源中的)

sudo apt-get install apt-file
sudo apt-file update

查找文件所属的包

sudo apt-file search libGL.so

通过以上3种方法,方法c查找到了l;ibGL.so的应该安装的位置以及所属的包:

libgl1: /usr/lib/x86_64-linux-gnu/libGL.so.1
libgl1: /usr/lib/x86_64-linux-gnu/libGL.so.1.0.0
libglvnd-dev: /usr/lib/x86_64-linux-gnu/libGL.so
nvidia-340: /usr/lib/i386-linux-gnu/libGL.so
nvidia-340: /usr/lib/i386-linux-gnu/libGL.so.1
nvidia-340: /usr/lib/i386-linux-gnu/libGL.so.340.106
nvidia-340: /usr/lib/i386-linux-gnu/libGL.so.340.108
nvidia-340: /usr/lib/x86_64-linux-gnu/libGL.so
nvidia-340: /usr/lib/x86_64-linux-gnu/libGL.so.1
nvidia-340: /usr/lib/x86_64-linux-gnu/libGL.so.340.106
nvidia-340: /usr/lib/x86_64-linux-gnu/libGL.so.340.108
primus-libs: /usr/lib/x86_64-linux-gnu/primus/libGL.so.1
virtualbox-guest-x11: /usr/lib/virtualbox/additions/libGL.so
virtualbox-guest-x11: /usr/lib/virtualbox/additions/libGL.so.1
virtualbox-guest-x11-hwe: /usr/lib/virtualbox/additions/libGL.so
virtualbox-guest-x11-hwe: /usr/lib/virtualbox/additions/libGL.so.1

如果在/usr/lib/x86_64-linux-gnu/libGL.so存在,直接看2.1.3,如果不存在看2.1.2

总结:pcl库的libGL.so被之前安装的nvidia-340抢了优先配偶权。

2.1.2造一个libGL.so

通过方法a,选取一个libGL.so文件,就他了

/snap/gnome-3-34-1804/77/usr/lib/x86_64-linux-gnu/libGL.so
sudo cd  /snap/gnome-3-34-1804/77/usr/lib/x86_64-linux-gnu&&cp libGL.so /usr/lib/x86_64-linux-gnu

好了有libGL.so文件了。

2.1.3 重新链接动态库/usr/lib/x86_64-linux-gnu/libGL.so

cd /usr/lib/x86_64-linux-gnu

a.查看链接属性

ls -il

对应的libGL.so属性信息:

 936244 -rw-r--r--  1 root root   547152 316 15:54 libGL.so
 927837 lrwxrwxrwx  1 root root       14 38 06:20 libGL.so.1 -> libGL.so.1.0.0
 927838 -rw-r--r--  1 root root   567624 510  2019 libGL.so.1.0.0

b.将libGL.so链接到libGL.so.1.0.0,如果没提示“文件已存在”,那直接make1工程吧

$ln -s /usr/lib/x86_64-linux-gnu/libGL.so.1.0.0 /usr/lib/x86_64-linux-gnu/libGL.so
ln: 无法创建符号链接'/usr/lib/x86_64-linux-gnu/libGL.so': 文件已存在

c.删除.so文件的链接属性

sudo rm -rf libGL.so  

d.重新进行链接

$ln -s /usr/lib/x86_64-linux-gnu/libGL.so.1.0.0 /usr/lib/x86_64-linux-gnu/libGL.so

好了,查看一下链接成果吧:

ls -n /usr/lib/x86_64-linux-gnu/libGL.so
lrwxrwxrwx 1 0 0 40 316 17:06 /usr/lib/x86_64-linux-gnu/libGL.so -> /usr/lib/x86_64-linux-gnu/libGL.so.1.0.0

重新make1中提到的工程,说不定会有惊喜。
在这里插入图片描述

方法c的补充
查看某个已装安装包的文件位置

dpkg -L libglvnd-dev//查看pcl的某个依赖库安装位置

想都是问题,做都是答案!
感谢各位!
参考链接:.so动态库链接、如何取消软连接

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于ros中pcl_ros和ros链接问题Makefile:140的一种解决方案 的相关文章

随机推荐

  • Redis五种基本数据类型

    五种基本数据类型 redis无论什么数据类型 xff0c 在数据库中都是以key value形式保存 xff0c 并且所有的key 键 都是字符串 xff0c 所以讨论基础数据结构都是讨论的value值的数据类型 主要包括常见的5种数据类型
  • 直线的斜率

    斜率 xff0c 亦称 34 角系数 34 xff0c 表示一条直线相对于横轴的倾斜程度 一条直线与某平面直角坐标系横轴正半轴方向的夹角的正切值即该直线相对于该坐标系的斜率 如果直线与x轴垂直 xff0c 直角的正切值无穷大 xff0c 故
  • ElasticSearch--整合SpringBoot

    引入依赖 span class token tag span class token tag span class token punctuation lt span dependency span span class token pun
  • ElasticSearch--聚合查询

    聚合查询 简介 聚合 xff1a 英文为Aggregation xff0c 是es除搜索功能外提供的针对es数据做统计分析的功能 聚合有助于根据搜索查询提供聚合数据 聚合查询是数据库中重要的功能特性 xff0c ES作为搜索引擎兼数据库 x
  • CopyOnWriteArrayList简介

    1 简介 CopyOnWriteArrayList 是 ArrayList 的线程安全版本 就是在进行写操作的时候会 copy 原数组 xff0c 然后写完将指针指向新的数组 xff0c 是一种读写分离的思想 xff0c 可以并发的读 xf
  • PX4平台(V3)+T8S遥控器校准

    1 PX4与接收机的连接 首先 xff0c 将遥控器接收机的信号线与PX4的RC IN信号相连 xff08 注意正负极 xff09 xff0c 在主控上电之后 xff0c 观察接收机信号指示灯的颜色 xff1a 1 PWM 信号工作模式 接
  • PX4编写CAN应用程序控制底盘运动

    目录 一 在PX4平台中添加自己的应用程序 1 建立应用程序 Hello can c文件 xff1a Kconfig文件 xff1a CMakeLists txt文件 xff1a 2 编译应用程序及固件 3 测试应用 xff08 硬件 xf
  • PyCharm2021安装教程

    Windows安装PyCharm2021教程 一 下载安装PyCharm二 安装Python三 配置PyCharm环境四 使用PyCharm五 PyCharm简介 一 下载安装PyCharm 1 进入官网PyCharm的下载地址 xff1a
  • ROS学习(二)创建功能包

    在上一讲中我们已经创建好工作空间catkin ws xff0c 我们要在其src文件中创建功能包 文章目录 一 创建功能包二 编译功能包三 查看功能包的依赖3 1一阶依赖3 2间接依赖 四 定制功能包自定义package xml文件4 1
  • 双冒号(::)和单冒号(:)在 C++ 中的含义和作用

    目录 一 双冒号 xff08 xff09 在C 43 43 中的含义和作用 二 单冒号 xff08 xff09 在C 43 43 中的含义和作用 双冒号 xff08 xff09 和单冒号 xff08 xff09 在 C 43 43 中都是特
  • 【OpenCV教程】OpenCV中的数据类型

    文章目录 1 CV 8U2 CV 8S3 CV 16U4 CV 16S5 CV 16F6 CV 32S7 CV 32F8 CV 64F9 一图流 1 CV 8U CV 8U 占8位的unsigned CV 8UC n 占8位的unsigne
  • 【ROS教程】安装ROS全流程及可能遇到的问题

    文章目录 1 配置Softerware amp Updates2 添加软件源3 设置key4 更新并安装4 1 更新4 2 安装 ros noetic desktop full 4 2 1 安装aptitude4 2 2 安装ROS软件包
  • 【unix】unix环境高级编程

    文章目录 1 UNIX基础知识1 基本知识2 文件和目录3 输入和输出4 程序和进程5 出错处理6 用户标识7 信号8 时间9 系统调用和库函数 标准化和实现1 标准化 ISO C POSIX Single UNIX Specificati
  • 在 Ubuntu 中安装 VSCode

    在 Ubuntu 中安装 VSCode 如果想要通过 ubuntu 安装 vscode 有三种方式 xff0c 可以通过应用中心下载 xff0c 也可以通过安装包下载 xff0c 以及指令安装 方式一 xff1a 首先在 ubuntu 桌面
  • 常用命名规范分类:匈牙利命名法、下划线命名法、驼峰命名法、帕斯卡命名法

    目录 1 匈牙利命名法 xff08 Hungarian xff09 变量属性 2 下划线命名法 xff08 UnderScoreCase xff09 3 驼峰命名法 xff08 小驼峰命名法 xff09 xff08 Camel xff09
  • keil5无法跳转自己要查询的函数

    之前用keil5的时候想要查询函数的意思 xff0c 去跳转结果给我报错 xff0c 出现这个报错信息 原因是编译的时候没有勾选这个按钮 xff1a 勾选上之后重新编译就不会报错了
  • Linux 安装 Node.js | NPM

    超级简单 yum y install nodejs 验证安装 安装node js 会自动一起安装npm 注意 python V 是大写字母V 错写为小写会进入python的编辑模式 执行exit 退出 执行node 启动node终端 两次C
  • 树莓派连接不上WIFi,VNC失效,SSH失效

    笔记 xff1a 树莓派连接不上wifi的解决方法 xff1a 1 xff0c usb连接手机 xff0c 手机设置中搜索 xff0c usb共享网络 xff0c 然后代开usb连接网络 2 xff0c 右键树莓派wifi标志符 xff0c
  • C++中类的运算符重载教程(一),内附完整代码与解析

    目录 xff1a 一 xff1a 加号运算符重载 对 43 重载函数的理解 xff1a xff08 个人理解 xff0c 仅供参考 xff09 二 xff1a 左移运算符的重载 对 lt lt 重载函数的理解 xff08 个人理解 xff0
  • 关于ros中pcl_ros和ros链接问题Makefile:140的一种解决方案

    本人在ros学习pcl和slam过程中 xff0c 使用catkin make进行编译 xff0c 最终只报了错误Makefile 140和make j4 l4错误 xff0c 诸如此类错误 xff0c 多为链接过程出现问题 坑多日 xff