当前位置: 首页 > article >正文

为什么你的 Qt 应用程序会出现 xcb 插件错误

有朋友咨询为什么他们的 Qt 应用程序在统信 UOS ARM 版本下运行,提示如下错误:

qt.qpa.plugin: Could not find the Qt platform plugin "xcb" in ""
  This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.

这个错误比较常见,通常是 Qt 应用程序编译后,直接在 debug 或 release 目录下直接运行应用程序。

在回答这个问题之前,先了解一下 xcb 和 Qt xcb 插件。

1. XCB (X Protocol C Binding):

XCB 是一个用于与 X 服务器通信的库,提供了比传统 Xlib 更高效、更现代的接口。它是 X11 协议的 C 语言绑定,用于在 Linux 和其他类 Unix 系统上管理图形窗口。

2. Qt 平台插件 "xcb":

该插件使 Qt 应用程序能够在基于 X11 的 Linux 系统上运行。它负责处理窗口管理、事件处理、输入设备交互等与图形界面相关的任务。

Qt 平台插件 "xcb"的文件名一般为 libqxcb.so。

一般来说,出现这个错误是 Qt 应用程序找不到 libqxcb.so 这个插件。将插件打包到应用程序中即可,方法如下:

1. 找到 qxcb 插件。Qt 插件的路径通常为:

<Qt安装路径>/plugins/platforms/libqxcb.so

例如:

/home/user/Qt/5.15.2/gcc_64/plugins/platforms/libqxcb.so&nbsp

2. 将插件放置到应用程序的目录中。在应用程序的根目录下创建一个 platforms 文件夹,并将 libqxcb.so 复制到其中。

3. 设置插件搜索路径。在应用程序启动时,通过代码或环境变量指定插件搜索路径。例如:

export QT_PLUGIN_PATH=$(pwd)/platforms

或者在代码中设置:

QCoreApplication::addLibraryPath("./platforms");

朋友按照这样做了之后,仍然提示上面的错误。

这种情况下,一般是由于 libqxcb.so 的依赖不满足导致的,可以用 ldd 命令查看一下是不是所有依赖的 so 都能找到。

一般来说,使用该插件需要系统中安装 X11 和 XCB 库,通过安装 x11 库和 xcb 库解决。也可以将 so 一起打包到应用程序中。

经过这两步,解决了问题。但朋友还有一个疑问,为什么在麒麟的 arm 系统上不需要这些步骤。

这是由于麒麟系统上 Qt 库的版本是5.15.2,项目中正好也是使用的5.15.2这个版本,所以在麒麟 arm 上直接使用的系统 qt 库。如果是系统 qt 库,插件已经安装在系统路径,相关依赖也满足。而现在在统信 UOS 系统上,由于系统 Qt 版本低一些,就没有使用。

其实在 Linux 下要处理 Qt 应用程序的库依赖,可以使用 linuxdeployqt 这个工具。


http://www.kler.cn/a/514328.html

相关文章:

  • Qt调用ffmpeg库实现简易视频播放器示例
  • C++ 类与对象(上)
  • 【技术总结类】2024,一场关于海量数据治理以及合理建模的系列写作
  • (10)深入浅出智能合约OpenZeppelin开源框架
  • 2024年第十五届蓝桥杯青少组国赛(c++)真题—快速分解质因数
  • 我在广州学Mysql 系列——触发器的使用
  • 54.DataGrid数据框图 C#例子 WPF例子
  • HTML中相对路径和绝对路径详解
  • react中hooks之useId用法总结以及与useRef用法区别
  • LeetCode hot 力扣100 LRU 缓存
  • 升级到MySQL 8.4,MySQL启动报错:io_setup() failed with EAGAIN
  • KubeKey安装K8s和kubesphere
  • ConvBERT:通过基于跨度的动态卷积改进BERT
  • 【Linux入门】2w字详解yum、vim、gcc/g++、gdb、makefile以及进度条小程序
  • 电脑办公技巧之如何在 Word 文档中添加文字或图片水印
  • 使用Sum计算Loss和解决梯度累积(Gradient Accumulation)的Bug
  • C# LINQ(Language Integrated Query)详解
  • docker部署的gitlab迁移
  • 图像点处理
  • 使用 vllm 部署 MiniCPM-o 2.6
  • Logo语言的操作系统
  • PostIn安装教程
  • Windows电脑安装USB Redirector并实现内外网跨网USB共享通信访问
  • Python爬虫学习第一弹 —— 爬虫的基础知识 及 requests基础
  • 深入理解机器学习中的零样本、少样本与微调
  • 金融场景 PB 级大规模日志平台:中信银行信用卡中心从 Elasticsearch 到 Apache Doris 的先进实践