Ubuntu 22.04中解决Could not load the Qt platform plugin “xcb“问题解决方法

摘要:在Ubuntu 22.04中安装OpenCV后,遇到“load the Qt platform plugin “xcb” in site-packages/cv2/qt/plugins" even though it was found. 的问题,导致程序无法启动。本文详细探讨了该问题的成因,并介绍了几种常见但无效的解决方法,包括设置环境变量、重装OpenCV或PySide6、以及降低OpenCV或Qt版本等。这些方法未能处理系统中缺失的XCB相关依赖项。最终,本文通过命令sudo apt install libxcb-*来安装所有与XCB相关的库,从而成功解决问题。


1. 引言

在Linux环境下,尤其是使用Ubuntu时,我们经常会选择OpenCV来进行图像处理和计算机视觉开发。最近,我在Ubuntu 22.04中安装OpenCV并运行代码时,遇到了一个比较棘手的问题——“Could not load the Qt platform plugin ‘xcb’”。这个问题直接导致程序无法启动,尽管系统已经找到了相应的插件。经过多次尝试和研究,我终于找到了一个有效的解决方案。在这篇博客中,我细介绍这个问题的解决过程,希望能帮助到同样遇到此问题的开发人员。


2. 错误描述

首先说一下,我的项目中使用了PyTorch、OpenCV和PySide6这些库,其实就是使用QT界面显示深度学习的一些项目。在Windows中运行良好,但同样的代码,在安装完OpenCV并尝试在ubuntu上运行时,终端报出了以下错误:

load the Qt platform plugin "xcb" in "/home/mindcraft/miniconda3/envs/env_rec/lib/python3.10/site-packages/cv2/qt/plugins" even though it was found.
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.Available platform plugins are: vkkhrdisplay, xcb, minimal, wayland, minimalegl, wayland-egl, linuxfb, vnc, offscreen, eglfs.

从错误信息来看,问题的核心在于Qt无法加载xcb平台插件,即使系统已经找到了这个插件。这个问题比较奇怪,因为这个错误很容易以为是PyQt5或者PySide6的库报出来的。一般QT的环境变量没有设置好,也会提示说不能载入插件。

在这里插入图片描述

但仔细看这个错误是OpenCV报出来的,提示信息里面的“cv2/qt/plugins”就是OpenCV。我又想到会不会是PySide6的QT环境变量与OpenCV的相互影响了?找了一通,被很多教程给误导,没能解决。


3. 常见但无效的解决方法

在尝试解决这个问题的过程中,找到了很多以下常见但无效的解决方法:

  1. 设置环境变量
    很多教程建议设置环境变量export QT_QPA_PLATFORM=xcb,以确保Qt使用正确的插件,或者设置成vkkhrdisplay, xcb, minimal, wayland, minimalegl, wayland-egl, linuxfb, vnc, offscreen, eglfs这些其中的任一个。然而,尽管设置了这个变量,问题依然存在,并没有实质性的改善。这是因为该设置只是指示Qt使用特定的平台插件,而并未解决插件初始化失败的根本问题。

  2. 安装基础库
    常见的做法是安装一些与XCB相关的基础库,如:

    sudo apt-get install libxcb1 libxcb-util1 libx11-xcb1 libxrender1 libxrandr2 libxi6
    

    虽然这些库的安装可能会解决某些依赖性问题,但由于没有涵盖所有XCB相关的依赖项,因此大多数情况下问题依然存在。

  3. 重装OpenCV或重装PySide6
    尝试通过重新安装OpenCV或重装PySide6来解决问题,命令如下:

    pip uninstall opencv-python
    pip install PySide6
    pip install opencv-python
    pip install PySide6
    

    虽然重新安装OpenCV可以确保所有OpenCV组件被正确配置,但由于问题的根源在于Qt和XCB的依赖性,而非OpenCV本身,所以这种方法通常不会解决问题。

  4. 降低OpenCV或Qt版本
    一些开发者可能会尝试通过降低OpenCV或Qt的版本来解决兼容性问题。然而,这种方法也没有奏效,更换版本有时甚至会引入其他问题,导致新的兼容性问题。


4. 最终有效的解决方案

经过一番深入的探索,最终找到了一个有效的解决方案,即通过以下命令安装所有与libxcb相关的库:

sudo apt install libxcb-*

这条命令会安装所有以libxcb为前缀的库,确保系统中所有与XCB相关的依赖项都被正确安装。这一步成功解决了Qt无法加载xcb插件的问题,程序也顺利启动并运行。这表明,问题的根源在于某些关键的XCB依赖项缺失,而通过这种“一网打尽”的方式,我们可以确保所有相关的依赖项都得到满足。

在这里插入图片描述

这时再次运行py程序,我久违的界面就出现了。返回去看应该是某些关键的XCB依赖项缺失了,用这个命令正好安装了其中所需的。至于具体是哪个起到了作用,还真是难说,不过问题是解决了。

在这里插入图片描述


7. 参考资料

  • Qt Documentation
  • Ubuntu Packages
  • XCB Documentation
  • solved: Could not load the Qt platform plugin “xcb”

如果你在解决类似问题时有其他见解或想法,欢迎在评论区分享!希望这篇文章对你有所帮助。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TCP粘包和抓包

在 TCP 套接字中,发送和接收缓冲区用于暂存数据,以确保数据的可靠传输。具体来说,TCP 的 socket 收发缓冲区的主要特点和概念如下: 1. 发送缓冲区(Send Buffer) 定义: 发送缓冲区用于存储待发送的数据。应…

Android车载蓝牙音乐实例(附Demo源码):实现手机播放音乐后车机应用显示音乐名称,歌手,专辑名。且可控制上一曲下一曲,暂停播放功能

一、功能需求 功能需求是在Android10以上设备上实现蓝牙音乐功能,细分为两个功能点: 1、手机和车载设备实现蓝牙连接 (本Demo文只做监听蓝牙连接状态,需手动到设置中连接蓝牙) 2、连接蓝牙成功后手机播放音乐时车载…

vscode修改选中文字颜色及当前tab颜色

VSCode-》首选项-》设置->-》搜color,找到:Workbench:Color Customizations,点击:在 settings.json 中编辑 加上 选中的文字内容的 配置 "workbench.colorCustomizations": {//设置用户选中代码段的颜色&…

前端——盒子模型

一个盒子的特点组成 外边距就是两个元素之前的距离 padding就是填充区的大小 从上开始 顺时针进行设置,没有则对称 也可以单独对某个方向进行设定,比如:padding-top border 边框区 符合属性 border-style 边框样式 border-color 边框颜色…

Flink常见数据源(source)使用教程(DataStream API)

前言 一个 Flink 程序,其实就是对 DataStream 的各种转换。具体来说,代码基本上都由以下几部分构成,如下图所示: 获取执行环境(execution environment)读取数据源(source)定义基于数据的转换操作(transformations)定义计算结果的输出位置(sink)触发程序执行(exec…

Ps:首选项 - 常规

Ps菜单:编辑/首选项 Edit/Preferences 快捷键:Ctrl K Photoshop 首选项中的“常规” General选项卡主要用于调整 Photoshop 的整体工作行为和用户体验。这些设置让用户可以根据个人习惯和工作流程定制软件的响应方式和界面布局,从而提高工作…

读软件开发安全之道:概念、设计与实施08密码学(下)

1. 对称加密 1.1. symmetric encryption 1.2. 使用各方共享的密钥来隐藏数据 1.2.1. 对称加密在本质上依赖共享密钥 1.3. 所有加密都是通过对明文进行转换,把明文消息(或者原始消息)变成无法识别的形式(也称为密文&#xff09…

Linux 下命令行参数和环境变量

Linux 下命令行参数和环境变量 命令行参数为什么要有命令行参数谁可以做到结论 环境变量一些现象查看环境变量添加环境变量添加内存级环境变量永久有效 其他环境变量HOMEPWDSHELLHISTSIZE 自定义环境变量定义取消 本地变量整体理解环境变量环境变量的组织方式Linux 代码获取环境…

32 增加系统调用(1)

系统调用在 数据手册中的描述 这是在 GDT 中的描述符 这个系统调用 segment selector 指向的时 内核的代码段。因为系统调用需要的权限比较高。 offset 指的时 在内核代码中的具体的函数的地址。

深入浅出消息队列----【Broker 集群】

深入浅出消息队列----【Broker 集群】 单 master多 master多 master 多 slave 异步复制多 master 多 slave 同步复制Dledger 本文仅是文章笔记,整理了原文章中重要的知识点、记录了个人的看法 文章来源:编程导航-鱼皮【yes哥深入浅出消息队列专栏】 Brok…

ssrf攻击fastcgi复现

文章目录 环境搭建使用网页查看开始攻击 环境搭建 在/usr/local/nginx/html下新建一个php文件 phpinfo.php 1.php <?php highlight_file(__FILE__); $url $_GET[url]; $curl curl_init($url); curl_setopt($curl, CURLOPT_HEADER, 0); $responseText curl_exec($curl)…

Neo4J下载安装

Windows 版本 1、 下载链接安装JDK 下载链接 https://download.oracle.com/java/22/latest/jdk-22_windows-x64_bin.msi 下载完毕后默认安装即可 2、 下载Neo4J 进入Neo4j Deployment Center - Graph Database & Analytics下载页面&#xff0c;选择社区版&#xff0c;…

QT Quick QML 实例之定制 TableView

QT Quick QML 实例之定制 TableView 一、演示二、C关键步骤1. beginInsertRows()&#xff08;用户插入行&#xff09;2. roleNames() &#xff08;表格中列映射&#xff09;3. data() &#xff08;用户获取数据&#xff09;4. headerData() &#xff08;表头&#xff09;5. fla…

依靠 VPN 生存——探索 VPN 后利用技术

执行摘要 在这篇博文中,Akamai 研究人员强调了被忽视的 VPN 后利用威胁;也就是说,我们讨论了威胁行为者在入侵 VPN 服务器后可以用来进一步升级入侵的技术。 我们的发现包括影响 Ivanti Connect Secure 和 FortiGate VPN 的几个漏洞。 除了漏洞之外,我们还详细介绍了一组…

ETAS工具链自动化实战指南<二>

----自动化不仅是一种技术&#xff0c;更是一种思维方式&#xff0c;它将帮助我们在快节奏的工作环境中保持领先&#xff01; 目录 往期推荐 RTA-A2L工具概览 RTA-A2L的输出文件 常用命令行参数 场景1&#xff1a;通过 MCSD 文件来生成 .a2l 文件并更新地址 命令用法 命…

比Maven快2~10倍的编译工具mvnd简介与实战

概述 maven-mvnd&#xff0c;可简称&#xff08;或缩写&#xff09;mvnd&#xff0c;the Maven Daemon。Apache Maven团队借鉴Gradle和Takari后开发的更快的构建工具。mvnd内嵌Maven&#xff0c;开发者可无缝从Maven迁移到mvnd。 参考资料&#xff1a;GitHub。 mvnd中会启动…

【数据结构篇】~二叉树(堆)

【数据结构篇】~二叉树&#xff08;堆&#xff09; 二叉树1.树2.树的组成3.二叉树4.堆1.向上调整算法2.向下调整算法3.堆排序 4.topk问题源码 二叉树 1.树 树的概念与结构​ 树是一种非线性的数据结构&#xff0c;它是由 n&#xff08;n>0&#xff09; 个有限结点组成一个…

BUG——GT911上电后中断一直触发

版型&#xff1a;正点原子 I.MX6UL MINI板 屏幕&#xff1a;7寸 1024*600 ATK-MD0700R V1.4 我的建议是买7寸屏幕就不要Mini板&#xff0c;因为Mini板太小装不下7寸屏幕&#xff0c;你需要一个更大的板子 简介&#xff1a; 算是作为一个后来者对这一现象的补充。解决方案就…

linux memory cgroup的memory.move_charge_at_immigrate含义

1.内核文档 上面的例子说明&#xff1a; 最开始某个进程是在cgroup A中&#xff0c;后面要迁移到cgroup B中&#xff0c;那么进程的内存计数是否要完全迁入B中&#xff0c;就是通过memory.move_charge_at_immigrate控制&#xff0c;如果目标cgroup也就是B设置了1到该字段中&am…

DBeaver安装使用

文章目录 简介支持的数据库支持的系统 下载安装DBeaver使用修改Maven下载jar地址窗口->首选项连接->驱动->Maven配置仓库地址 选择需要连接的数据库进行连接 简介 DBeaver 是一个通用的数据库管理工具和 SQL 客户端&#xff0c;支持 MySQL, PostgreSQL, Oracle, DB2,…