配置PX4中make报错:The imported target “Qt5::Gui“ references the file-libEGL.so(libGL.so)

博客介绍了在Ubuntu系统下,构建XTDrone的PX4 SITL时遇到的Qt5库依赖问题,特别是libEGL.so和libGL.so的链接错误。通过检查文件属性发现libEGL.so为软链接,且链接已损坏。解决方案包括登录root权限,删除现有链接,重新创建指向正确源文件的软链接。经过此修复,成功解决了问题并完成了PX4-Gazebo的配置。

在XTDrone的PX4搭建中,
make px4_sitl_default gazebo过程报错:

CMake Error at /usr/lib/x86_64-linux-gnu/cmake/Qt5Gui/Qt5GuiConfig.cmake:27 (message):
  The imported target "Qt5::Gui" references the file

     "/usr/lib/x86_64-linux-gnu/libEGL.so"      #关键点

  but this file does not exist.  Possible reasons include:

  * The file was deleted, renamed, or moved to another location.

  * An install or uninstall procedure did not complete successfully.

  * The installation package was faulty and contained

     "/usr/lib/x86_64-linux-gnu/cmake/Qt5Gui/Qt5GuiConfigExtras.cmake"

  but not all the files it references.

Call Stack (most recent call first):
  /usr/lib/x86_64-linux-gnu/cmake/Qt5Gui/Qt5GuiConfigExtras.cmake:50 (_qt5_Gui_check_file_exists)
  /usr/lib/x86_64-linux-gnu/cmake/Qt5Gui/Qt5GuiConfigExtras.cmake:72 (_qt5gui_find_extra_libs)
  /usr/lib/x86_64-linux-gnu/cmake/Qt5Gui/Qt5GuiConfig.cmake:158 (include)
  /usr/lib/x86_64-linux-gnu/cmake/Qt5Widgets/Qt5WidgetsConfig.cmake:99 (find_package)
  /usr/lib/x86_64-linux-gnu/cmake/Qt5/Qt5Config.cmake:26 (find_package)
  CMakeLists.txt:61 (find_package)


-- Configuring incomplete, errors occurred!

原因:查看文件属性,发现:链接(已断) (inode/symlink),或Link (broken) (inode/symlink)

解决方法:
登录root:

sudo su    #并输入密码
ls -l /usr/lib/x86_64-linux-gnu/libEGL.so    #查看libEGL.so这个文件的inode码(因为Linux系统靠inode码而非文件名来识别文件,这个inode码下面操作要用到

输出:
lrwxrwxrwx 1 root root 18 6月  15  2018 /usr/lib/x86_64-linux-gnu/libEGL.so -> mesa-egl/libEGL.so
可知libEGL.so这个文件是链接到mesa-egl下的libEGL.so文件上的,可把mesa-egl下的libEGL.so文件当源文件。

ln -s /usr/lib/x86_64-linux-gnu/mesa-egl/libEGL.so /usr/lib/x86_64-linux-gnu/libEGL.so #开始软链接,软链接语法:ln 源文件 目标文件

报错:
ln: failed to create symbolic link '/usr/lib/x86_64-linux-gnu/libEGL.so': File exists

删除这个存在的目标文件libEGL.so:
先备份再:
sudo rm /usr/lib/x86_64-linux-gnu/libEGL.so

再链接:
ln -s /usr/lib/x86_64-linux-gnu/mesa-egl/libEGL.so /usr/lib/x86_64-linux-gnu/libEGL.so
再把libEGL.so链接到其他版本上:
sudo ln /usr/lib/x86_64-linux-gnu/libEGL.so.1   /usr/lib/x86_64-linux-gnu/libEGL.so

再查看文件属性,发现已经链接成功。
在这里插入图片描述
再次make,出现相似的报错:

The imported target "Qt5::Gui" references the file

     "/usr/lib/x86_64-linux-gnu/libGL.so"

这次轮到libGL.so了,处理方法类似libEGL.so。

再次make px4_sitl_default gazebo,PX4-Gazebo配置成功:
在这里插入图片描述

参考:

XTDrone: 文档.

博客: 链接.

CMake Error at /usr/lib/aarch64-linux-gnu/cmake/Qt5Gui/Qt5GuiConfig.cmake:26 (message): The imported target "Qt5::Gui" references the file "/usr/lib/aarch64-linux-gnu/qt5/plugins/xcbglintegrations/libqxcb-glx-integration.so" but this file does not exist. Possible reasons include: * The file was deleted, renamed, or moved to another location. * An install or uninstall procedure did not complete successfully. * The installation package was faulty and contained "/usr/lib/aarch64-linux-gnu/cmake/Qt5Gui/Qt5Gui_QXcbGlxIntegrationPlugin.cmake" but not all the files it references. Call Stack (most recent call first): /usr/lib/aarch64-linux-gnu/cmake/Qt5Gui/Qt5GuiConfig.cmake:231 (_qt5_Gui_check_file_exists) /usr/lib/aarch64-linux-gnu/cmake/Qt5Gui/Qt5Gui_QXcbGlxIntegrationPlugin.cmake:5 (_populate_Gui_plugin_properties) /usr/lib/aarch64-linux-gnu/cmake/Qt5Gui/Qt5GuiConfig.cmake:240 (include) /usr/lib/aarch64-linux-gnu/cmake/Qt5Widgets/Qt5WidgetsConfig.cmake:111 (find_package) /usr/lib/aarch64-linux-gnu/cmake/Qt5OpenGL/Qt5OpenGLConfig.cmake:111 (find_package) /usr/lib/aarch64-linux-gnu/cmake/Qt5/Qt5Config.cmake:28 (find_package) /usr/lib/aarch64-linux-gnu/cmake/vtk-9.1/VTK-vtk-module-find-packages.cmake:1008 (find_package) /usr/lib/aarch64-linux-gnu/cmake/vtk-9.1/vtk-config.cmake:150 (include) /usr/lib/aarch64-linux-gnu/cmake/pcl/PCLConfig.cmake:270 (find_package) /usr/lib/aarch64-linux-gnu/cmake/pcl/PCLConfig.cmake:319 (find_VTK) /usr/lib/aarch64-linux-gnu/cmake/pcl/PCLConfig.cmake:540 (find_external_library) /opt/ros/humble/share/pcl_conversions/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package) /opt/ros/humble/share/pcl_conversions/cmake/pcl_conversionsConfig.cmake:41 (include) CMakeLists.txt:12 (find_package)
最新发布
11-13
<think> 我们面对的问题是CMake报错,提示导入目标“Qt5::Gui”引用的文件“/usr/lib/aarch64-linux-gnu/qt5/plugins/xcbglintegrations/libqxcb-glx-integration.so”不存在。 根据引用[1][4]中的类似问题,这通常是由于符号链接损坏或缺失导致的。在引用[4]中,通过重新建立符号链接解决了类似问题(libEGL.so缺失)。引用[5]也提供了类似方法(修复libGL.so的链接)。 解决思路: 1. 确认该文件是否存在,如果不存在则需要安装相关包或从其他位置复制。 2. 如果文件存在,可能是链接不正确,需要重新建立符号链接。 3. 更新动态链接库缓存。 由于错误信息中指定的路径是:`/usr/lib/aarch64-linux-gnu/qt5/plugins/xcbglintegrations/libqxcb-glx-integration.so` 我们首先检查该路径下的文件是否存在。 步骤: 第一步:查找文件是否存在 我们可以使用find命令在系统中查找这个文件(或者类似的文件,因为可能是版本变化导致文件名略有不同)。 第二步:如果文件存在,但链接错误,则修复链接;如果文件不存在,则安装相应的包。 根据引用[2][3]提到的经验,这个文件通常由qt5的插件包提供。在Ubuntu/Debian系统上,这个包可能是`libqt5gui5`或`qtx11extras5-dev`等,但具体包名需要根据系统架构和版本确定。 由于用户提到的是aarch64(ARM64)架构,我们需要注意包名可能与此相关。 具体步骤: 1. 首先查找文件是否存在: sudo find / -name 'libqxcb-glx-integration.so*' 2>/dev/null 2. 如果找到,检查目标位置(/usr/lib/aarch64-linux-gnu/qt5/plugins/xcbglintegrations/)是否有这个文件,以及是否有正确的符号链接。如果没有,则创建符号链接。 3. 如果没找到,则尝试安装相关包: 在Ubuntu上,我们可以尝试安装以下包(根据错误信息,这个文件属于qt5的xcb插件): sudo apt install libqt5gui5 或者更具体的插件包: sudo apt install qtx11extras5-dev 注意:包名可能因系统版本而异。 4. 如果安装后仍然没有,可能需要从其他位置复制或者建立链接(如果找到了在其他路径下的该文件)。 5. 更新动态链接库缓存(虽然这个文件是插件,不是动态库,但为了确保其他依赖库正确,可以执行): sudo ldconfig 但是,根据引用[2]和[4]的做法,我们还需要确保ldconfig的配置包含了相关路径(通常系统路径已经包含,所以这步可能不需要)。 6. 如果还是不行,可能需要重新安装整个Qt5的相关包: sudo apt install --reinstall qtbase5-dev 考虑到错误信息中提到的路径包含`aarch64-linux-gnu`,我们还需要确认是否安装了对应架构的包。 具体操作如下: 步骤1:查找文件 打开终端,执行: sudo find / -name 'libqxcb-glx-integration.so*' 2>/dev/null 步骤2:根据查找结果处理 情况A:找到了该文件(比如在路径A) 检查目标目录是否存在:/usr/lib/aarch64-linux-gnu/qt5/plugins/xcbglintegrations/ 如果目标目录不存在,则创建: sudo mkdir -p /usr/lib/aarch64-linux-gnu/qt5/plugins/xcbglintegrations/ 然后,在目标目录中创建符号链接(如果找到的是具体的带版本的文件,则链接到不带版本的文件名): sudo ln -s [找到的文件的完整路径] /usr/lib/aarch64-linux-gnu/qt5/plugins/xcbglintegrations/libqxcb-glx-integration.so 情况B:没有找到 安装相关包: sudo apt update sudo apt install libqt5gui5 # 或者尝试 sudo apt install qtx11extras5-dev 然后再次执行步骤1,如果安装后找到了,则按照情况A处理。 步骤3:更新动态链接库配置(虽然此文件不是动态库,但为了确保其他依赖库正确): sudo ldconfig 步骤4:重新运行CMake。 另外,引用[4]中提到了一个类似的问题(libEGL.so不存在)的解决方法,也是通过重新建立符号链接。 注意:在建立符号链接时,要确保找到的文件是正确的架构(aarch64)版本,避免链接到x86_64的文件。 如果上述步骤无法解决,可能需要考虑安装完整的Qt5开发环境,或者检查CMake配置中是否指定了错误的Qt路径。 总结:核心思路是确保这个插件文件存在且位于CMake期望的位置(通过创建符号链接或安装包)。 生成相关问题: 1. 如何检查Qt5的安装路径? 2. 在Ubuntu系统中如何修复损坏的符号链接? 3. 如何安装特定架构(如aarch64)的Qt5开发包? 4. 如何设置CMakeQt5_DIR路径? </think> ### 解决CMake报错Qt5::Gui引用的libqxcb-glx-integration.so不存在 #### 问题分析 该错误表明CMake配置Qt5时,无法找到特定的OpenGL集成插件文件`libqxcb-glx-integration.so`(路径:`/usr/lib/aarch64-linux-gnu/qt5/plugins/xcbglintegrations/`)。根据引用[1][4][5],这通常由以下原因导致: 1. **符号链接损坏**:Qt插件文件通过符号链接指向实际文件,链接可能已断开 2. **文件缺失**:相关Qt包未正确安装或文件被误删 3. **路径配置错误**:动态链接器未正确注册库路径 #### 逐步解决方案 ##### 1. 检查文件是否存在 ```bash # 检查目标文件是否存在 ls -l /usr/lib/aarch64-linux-gnu/qt5/plugins/xcbglintegrations/libqxcb-glx-integration.so* # 查找系统中是否存在该文件(可能需要sudo权限) sudo find / -name libqxcb-glx-integration.so* 2>/dev/null ``` - ✅ 如果找到文件(如`/usr/lib/aarch64-linux-gnu/libqxcb-glx-integration.so.1.0.0`),转到**步骤3** - ❌ 如果未找到,转到**步骤2** ##### 2. 安装缺失的Qt包(未找到文件时) ```bash # 安装Qt5 XCB集成插件 sudo apt-get install --reinstall libqt5xcbqpa5 libxcb-xinerama0 # 验证安装 dpkg -L libqt5xcbqpa5 | grep libqxcb-glx-integration ``` ##### 3. 修复符号链接(找到文件时) ```bash # 进入插件目录 cd /usr/lib/aarch64-linux-gnu/qt5/plugins/xcbglintegrations/ # 删除损坏链接(如果存在) sudo rm -f libqxcb-glx-integration.so # 创建新链接(替换实际路径) sudo ln -s /usr/lib/aarch64-linux-gnu/libqxcb-glx-integration.so.1.0.0 libqxcb-glx-integration.so ``` ##### 4. 更新动态链接器配置 ```bash # 确保库路径在配置中 echo '/usr/lib/aarch64-linux-gnu' | sudo tee -a /etc/ld.so.conf.d/aarch64-libs.conf # 更新配置 sudo ldconfig ``` ##### 5. 验证修复 ```bash # 检查链接状态 ls -l /usr/lib/aarch64-linux-gnu/qt5/plugins/xcbglintegrations/libqxcb-glx-integration.so # 应显示有效链接(示例输出): # lrwxrwxrwx ... libqxcb-glx-integration.so -> /usr/lib/.../libqxcb-glx-integration.so.1.0.0 ``` #### 原理说明 Qt5的XCB插件(`libqxcb-glx-integration.so`)负责OpenGL与X Window系统的集成[^1][^4]。当CMake通过`Qt5GuiConfig.cmake`加载Qt::Gui目标时,会验证插件文件的完整性[^1]。符号链接损坏或文件缺失会导致配置失败,通过重建链接或重装包可恢复一致性[^4][^5]。 #### 预防措施 1. **避免手动删除Qt文件**:使用包管理器卸载 2. **系统升级后重建链接**: ```bash sudo apt install --reinstall libqt5gui5 sudo ldconfig ``` 3. **检查Qt安装完整性**: ```bash dpkg --verify libqt5gui5 # 返回空表示正常 ``` > 注:ARM架构(aarch64)路径与x86_64不同,需确保路径一致性[^2][^3]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值