在未安装 qt 的 Linux 上启动 qt5 应用程序时出现“无法加载平台插件“xcb””

2024-10-10 09:29:00
admin
原创
91
摘要:问题描述:我编写了使用 Qt5 的 Linux 应用程序。但是当我尝试在未安装 Qt SDK 的 Linux 上启动它时,控制台中的输出是:无法加载平台插件“xcb”。可用平台有:我该如何解决这个问题?也许我需要复制一些插件文件?当我使用安装了 Qt5 的 ubuntu 时,但我重命名了 Qt 目录,也会出现...

问题描述:

我编写了使用 Qt5 的 Linux 应用程序。

但是当我尝试在未安装 Qt SDK 的 Linux 上启动它时,控制台中的输出是:

无法加载平台插件“xcb”。可用平台有:

我该如何解决这个问题?也许我需要复制一些插件文件?当我使用安装了 Qt5 的 ubuntu 时,但我重命名了 Qt 目录,也会出现同样的问题。因此,它使用了 Qt 目录中的一些文件...

更新:当我在应用程序目录中创建包含文件libqxcb.so 的“platforms”文件夹时,应用程序仍然无法启动,但错误消息发生了变化:

无法加载平台插件“xcb”。可用平台有:

西卡

怎么会这样?平台插件明明有,怎么加载不上去?


解决方案 1:

使用 ldd (man ldd) 显示共享库依赖关系。在 libqxcb.so 上运行此命令

.../platforms$ ldd libqxcb.so

显示 xcb 除了依赖 libQt5Core.so.5 和 libQt5Gui.so.5(以及许多其他系统库)外,还依赖 libQt5DBus.so.5。将 libQt5DBus.so.5 添加到您的共享库集合中,您就可以继续前进了。

解决方案 2:

正如之前所发布的那样,您需要确保在部署应用程序时安装平台插件。根据您想要部署的方式,有两种方法可以告诉您的应用程序平台插件(例如platforms/plugins/libqxcb.so)在运行时的位置,这可能对您有用。

第一是通过QT_QPA_PLATFORM_PLUGIN_PATH变量导出目录的路径。

QT_QPA_PLATFORM_PLUGIN_PATH=path/to/plugins ./my_qt_app

或者

export QT_QPA_PLATFORM_PLUGIN_PATH=path/to/plugins
./my_qt_app

我更喜欢的另一个选项是在可执行文件所在的目录中创建一个 qt.conf 文件。其内容如下:

[Paths]
Plugins=/path/to/plugins

有关此内容的更多信息可以在此处和使用 qt.conf 中找到

解决方案 3:

我尝试在预装了5.7Qt 的 Ubuntu 16.04 LTS 上启动用 Qt 编译的二进制文件5.5。但没有成功。

一开始,我按照ldd这里的建议检查了二进制文件本身,并满足了所有“未找到”的依赖项。然后This application failed to start because it could not find or load the Qt platform plugin "xcb"抛出了这个臭名昭著的错误。

如何在 Linux 中解决这个问题

首先,您应该创建platforms二进制文件所在的目录,因为这是 Qt 查找 XCB 库的地方。复制libqxcb.so到那里。我想知道为什么其他答案的作者没有提到这一点。

然后,您可能需要运行QT_DEBUG_PLUGINS=1设置了环境变量的二进制文件来检查哪些依赖项libqxcb.so未得到满足。(您也可以ldd按照接受的答案中的建议使用它)。

命令输出可能如下所示:

me@xerus:/media/sf_Qt/Package$ LD_LIBRARY_PATH=. QT_DEBUG_PLUGINS=1 ./Binary
QFactoryLoader::QFactoryLoader() checking directory path "/media/sf_Qt/Package/platforms" ...
QFactoryLoader::QFactoryLoader() looking at "/media/sf_Qt/Package/platforms/libqxcb.so"
Found metadata in lib /media/sf_Qt/Package/platforms/libqxcb.so, metadata=
{
    "IID": "org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.3",
    "MetaData": {
        "Keys": [
            "xcb"
        ]
    },
    "className": "QXcbIntegrationPlugin",
    "debug": false,
    "version": 329472
}


Got keys from plugin meta data ("xcb")
loaded library "/media/sf_Qt/Package/platforms/libqxcb.so"
QLibraryPrivate::loadPlugin failed on "/media/sf_Qt/Package/platforms/libqxcb.so" : "Cannot load library /media/sf_Qt/Package/platforms/libqxcb.so: (/usr/lib/x86_64-linux-gnu/libQt5DBus.so.5: version `Qt_5' not found (required by ./libQt5XcbQpa.so.5))"
This application failed to start because it could not find or load the Qt platform plugin "xcb"
in "".

Available platform plugins are: xcb.

Reinstalling the application may fix this problem.
Aborted (core dumped)

注意失败的libQt5DBus.so.5库。将其复制到库路径,在我的情况下,它是二进制文件所在的同一目录(因此LD_LIBRARY_PATH=.)。重复此过程,直到满足所有依赖关系。

PS 感谢这个答案的作者QT_DEBUG_PLUGINS=1

解决方案 4:

我尝试了每个答案的主要部分,但无济于事。最终为我修复该问题的是导出以下环境变量:

LD_LIBRARY_PATH=/usr/local/lib:~/Qt/5.9.1/gcc_64/lib
QT_QPA_PLATFORM_PLUGIN_PATH=~/Qt/5.9.1/gcc_64/plugins/ 

解决方案 5:

Ubuntu 16.04 64 位。我似乎毫无缘由地遇到了这个问题。前一天晚上,我在 VideoLan 实例上看了一部电影,那天晚上我想用 VideoLan 看另一部电影。VLC 就是不想运行,因为问题中的错误。我在 Google 上搜索了一下,找到了解决方案,它解决了我的问题:从现在开始,VLC 可以像以前一样运行。解决方案是这个命令:

sudo ln -sf /usr/lib/x86_64-linux-gnu/qt5/plugins/platforms/ /usr/bin/

我无法解释其后果是什么,但我知道它会创建一些缺失的符号链接。

解决方案 6:

从版本 5 开始,Qt 使用平台抽象系统 (QPA)从底层平台进行抽象。

每个平台的实现都由插件提供。对于 X11,它是 XCB 插件。有关依赖项的更多信息,请参阅Qt for X11 要求。

解决方案 7:

导致这个问题的原因可能有很多。关键是使用

export QT_DEBUG_PLUGINS=1

在运行 Qt 应用程序之前。然后,检查输出,它将指出错误的方向。在我的情况下是:

Cannot load library /opt/nao/plugins/platforms/libqxcb.so: (/opt/nao/bin/../lib/libz.so.1: version `ZLIB_1.2.9' not found (required by /usr/lib/x86_64-linux-gnu/libpng16.so.16))

但这可以在不同的线程中解决。例如,请参阅https://stackoverflow.com/a/50097275/2408964

解决方案 8:

这些信息可能会有所帮助。我使用的是 Ubuntu 18.04,当我尝试使用 ppa 方法安装Krita时,出现了以下错误:

此应用程序无法启动,因为它无法在“”中找到或加载 Qt 平台插件“xcb”。

可用的平台插件有:linuxfb、minimal、minimalegl、offscreen、wayland-egl、wayland、xcb。

重新安装该应用程序可能会解决此问题。

已中止

我尝试了在此线程和其他网站上找到的所有解决方案,但均未成功。

最后,我找到了一篇文章,其中作者提到可以使用这个简单的命令来激活 qt5 的调试工具:

export QT_DEBUG_PLUGINS=1

添加此命令后,我再次运行krita,出现相同的错误,但这次我知道了该错误的原因。

libxcb-xinerama.so.0:无法打开共享对象文件:没有此文件或目录。

此错误导致“xcb”无法正确加载。那么,解决方案是安装“libxcb-xinerama.so.0”,对吗?但是,当我运行以下命令时:

sudo apt install libxcb-xinerama

库已经安装好了。现在怎么办?Teo?好吧,我用了一个老办法 :) 是的,就是这个--reinstall

sudo apt install --reinstall libxcb-xinerama

TLDR:这最后一个命令解决了我的问题。

解决方案 9:

我遇到了非常相似的问题,错误消息相同。首先,通过使用命令行命令打开 Qt Debug 打印机进行调试:

导出 QT_DEBUG_PLUGINS=1

然后重新运行应用程序。对我来说,这揭示了以下内容:

“无法加载库 /home/.../miniconda3/lib/python3.7/site-packages/PyQt5/Qt/plugins/platforms/libqxcb.so: (libxkbcommon-x11.so.0: 无法打开共享对象文件:没有此文件或目录)”

“无法加载库 /home/.../miniconda3/lib/python3.7/site-packages/PyQt5/Qt/plugins/platforms/libqxcb.so: (libxkbcommon-x11.so.0: 无法打开共享对象文件:没有此文件或目录)”

确实,我缺少 libxkbcommon-x11.so.0 和 libxkbcommon-x11.so.0。接下来,使用 linux 命令行中的 dpkg 检查您的体系结构。(对我来说,“arch”命令给出了不同的、无用的结果)

dpkg --print-architecture #结果对我来说:amd64

然后我在 Google 上搜索了“libxkbcommon-x11.so.0 ubuntu 18.04 amd64”,同样搜索了 libxkbcommon-x11.so.0,在 packages.ubuntu.com 上找到了这些软件包。回想起来,不出所料,我缺少名为 libxkbcommon-x11-0 和 libxkbcommon0 的软件包,并且安装这些软件包将包含所需的文件,但开发版本则不会。然后是解决方案:

sudo apt-get 更新

sudo apt-get 安装 libxkbcommon0

sudo apt-get 安装 libxkbcommon-x11-0

解决方案 10:

因此,我花了大约一天的时间试图找出问题所在;尝试了所有建议的解决方案,但都没有奏效,比如安装 xcb 库或导出 Qt 插件文件夹。建议用来QT_DEBUG_PLUGINS=1调试问题的解决方案并没有像答案中那样为我提供直接的见解 - 相反,我得到了一些关于 Qt5Core 中未解析符号的信息。

不过,这给了我一个提示:如果它试图使用来自不同 Qt 安装的不同文件怎么办?在我的计算机上,我安装了标准版本/home/username/Qt/,并在项目中安装了我自己编译的一些本地版本(我在其他地方也有其他定制的工具包)。每当我尝试使用任何工具包(由 Qt 维护工具安装或我自己构建)时,我都会收到“xcb 错误”。

解决方案很简单:提供 Qt 路径 throughCMAKE_PREFIX_PATH而不是though Qt5_DIR,就像我做的那样,这样就解决了问题。例如:

cmake .. -DCMAKE_PREFIX_PATH=/home/username/Qt/5.11.1/gcc_64

解决方案 11:

想要在 Ubuntu 20.04 上开始使用这个的人请尝试运行它,看看是否能解决问题。这对我有用

sudo apt-get update -y
sudo apt-get install -y libxcb-xinerama0

解决方案 12:

我通过这个解决了这个问题https://github.com/NVlabs/instant-ngp/discussions/300

pip uninstall opencv-python
pip install opencv-python-headless

这似乎是 cv2 Python 包以及它在 Qt 中的循环方式存在的问题

解决方案 13:

安装 Viber 后,我遇到了同样的问题。它包含 中的所有必需 qt 库/opt/viber/plugins/。我检查了 的依赖项/opt/viber/plugins/platforms/libqxcb.so并发现缺少依赖项。它们是libxcb-render.so.0libxcb-image.so.0libxcb-icccm.so.4libxcb-xkb.so.1
因此我通过安装包含这些库的缺失软件包解决了我的问题:

apt-get install libxcb-xkb1 libxcb-icccm4 libxcb-image0 libxcb-render-util0

解决方案 14:

在我的情况下,缺少头文件是 Qt 无法构建的原因是libxcb。根据https://wiki.qt.io/Building_Qt_5_from_Git#Linux.2FX11安装它们解决了该问题:

yum install libxcb libxcb-devel xcb-util xcb-util-devel mesa-libGL-devel libxkbcommon-devel

解决方案 15:

我喜欢 的解决方案qt.conf

qt.conf下几行放在可执行文件附近:

[Paths]
Prefix = /path/to/qtbase

而且效果非常好 :^)

举一个实际的例子:

[Paths]
Prefix = /home/user/SDKS/Qt/5.6.2/5.6/gcc_64/

有关此内容的文档在这里:https://doc.qt.io/qt-5/qt-conf.html

解决方案 16:

你需要做的就是

pip uninstall PyQt5 

conda install pyqt 

pyqt 的大部分问题都可以通过这个最简单的解决方案来解决。

解决方案 17:

就我而言,我需要在 Ubuntu VirtualBox 客户机上部署两个 Qt 应用程序。一个是命令行(“app”),另一个是基于 GUI 的(“app_GUI”)。

我使用“ldd app”找出所需的库,并将它们复制到 Ubuntu 客户机。
虽然命令行可执行文件“app”工作正常,但基于 GUI 的可执行文件崩溃,并显示“无法加载平台插件“xcb”错误。我使用 ldd 检查了 libxcb.so,但这也没有缺少依赖项。

问题似乎是,虽然我确实复制了所有正确的库,但我意外地复制了客户系统中已经存在的库。这意味着 (a) 一开始就没有必要复制它们,(b) 更糟糕的是,复制它们会导致安装库之间不兼容。更糟糕的是,就像我说的,ldd 无法检测到它们。

解决方案?确保复制 ldd 显示为缺失的库,并且绝对不要复制多余的库

解决方案 18:

我将所有 Qt 内容静态链接到我的开源项目的通用 Linux 版本。这让生活变得轻松一些。您只需先构建 Qt 库的静态版本。当然,由于许可问题,这不能应用于闭源软件。目前在 Linux 上部署 Qt5 应用程序有点问题,因为例如 Ubuntu 12.04 在软件包存储库中没有 Qt5 库。

解决方案 19:

我遇到了这个问题,出于直觉,我从我的环境中删除了 Qt 配置。例如,

rm -rf ~/.config/Qt*

然后我启动了 qtcreator,它根据机器的现有状态重新配置了自身。它不再记得我的项目在哪里,但那只是意味着我必须再次“第一次”浏览它们。

但更重要的是,它为自己构建了一组连贯的库路径,因此我可以重建并再次运行我的项目可执行文件,而不会丢失 xcb 或 qxcb 库。

解决方案 20:

我遇到了同样的情况,但发生在 Ubuntu 20.04 VM 上。

TL;DR:检查文件权限。

我做了什么:

  • 我复制了所需的 Qt 库/usr/local/lib/x86_64-linux-gnu/并将其添加到LD_LIBRARY_PATH

  • 我将平台文件夹从 Qt 复制到我的应用程序目录并将其添加到QT_PLUGIN_PATH

  • 我在可执行文件和有问题的 libqxcb.so ( ldd libqxcb.so) 上运行了 ldd,它抱怨一些依赖项,尽管ldconfig它们被列为已找到。

        linux-vdso.so.1 (0x00007ffee19af000)
    libQt5XcbQpa.so.5 => not found
    libfontconfig.so.1 => /lib/x86_64-linux-gnu/libfontconfig.so.1 (0x00007f7cb18fb000)
    libfreetype.so.6 => /lib/x86_64-linux-gnu/libfreetype.so.6 (0x00007f7cb183c000)
    libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f7cb1820000)
    libQt5Gui.so.5 => /usr/local/lib/x86_64-linux-gnu/libQt5Gui.so.5 (0x00007f7cb0fd4000)
    libQt5DBus.so.5 => not found
  • 我使用它export QT_DEBUG_PLUGINS=1来获取更多信息。它抱怨缺少文件,尽管文件确实存在。

我的发现:

  • 由于某种原因,通过共享文件夹复制到虚拟机时文件权限不正确。

  • 因此,我竞选:sudo chmod 775 *在自由派上,瞧!

解决方案 21:

sudo ln -sf /usr/lib/....”adapt-it”.../qt5/plugins/platforms/ /usr/bin/

它创建了它错过的符号链接。对 QT 来说很好!对 VLC 来说很好!

相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   601  
  华为IPD与传统研发模式的8大差异在快速变化的商业环境中,产品研发模式的选择直接决定了企业的市场响应速度和竞争力。华为作为全球领先的通信技术解决方案供应商,其成功在很大程度上得益于对产品研发模式的持续创新。华为引入并深度定制的集成产品开发(IPD)体系,相较于传统的研发模式,展现出了显著的差异和优势。本文将详细探讨华为...
IPD流程是谁发明的   7  
  如何通过IPD流程缩短产品上市时间?在快速变化的市场环境中,产品上市时间成为企业竞争力的关键因素之一。集成产品开发(IPD, Integrated Product Development)作为一种先进的产品研发管理方法,通过其结构化的流程设计和跨部门协作机制,显著缩短了产品上市时间,提高了市场响应速度。本文将深入探讨如...
华为IPD流程   9  
  在项目管理领域,IPD(Integrated Product Development,集成产品开发)流程图是连接创意、设计与市场成功的桥梁。它不仅是一个视觉工具,更是一种战略思维方式的体现,帮助团队高效协同,确保产品按时、按质、按量推向市场。尽管IPD流程图可能初看之下显得错综复杂,但只需掌握几个关键点,你便能轻松驾驭...
IPD开发流程管理   8  
  在项目管理领域,集成产品开发(IPD)流程被视为提升产品上市速度、增强团队协作与创新能力的重要工具。然而,尽管IPD流程拥有诸多优势,其实施过程中仍可能遭遇多种挑战,导致项目失败。本文旨在深入探讨八个常见的IPD流程失败原因,并提出相应的解决方法,以帮助项目管理者规避风险,确保项目成功。缺乏明确的项目目标与战略对齐IP...
IPD流程图   8  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用