ChatGPT解决这个技术问题 Extra ChatGPT

在没有安装 qt 的情况下在 linux 上启动 qt5 应用程序时“无法加载平台插件“xcb””

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

但是当我试图在没有安装 Qt SDK 的情况下在 linux 上启动它时,控制台中的输出是:

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

我怎样才能解决这个问题?可能我需要复制一些插件文件吗?当我使用安装了 Qt5 的 ubuntu,但我重命名 Qt 目录时,会出现同样的问题。所以,它使用Qt目录中的一些文件......

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

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

这怎么可能发生?平台插件如何可用但无法加载?

澄清一下,Qt 库是否真的安装了?
如果安装了 Qt 库,程序可以正常工作。如果没有安装,或者没有找到 qt sdk 目录,则程序无法运行。
确保你也复制了 libQt5Gui.so.5
对于那些从 Eve Online 启动器来到这里的人:使用 eveonline.sh,而不是 eveonline - 启动器的所有库都与特殊版本捆绑在一起。
我的问题是通过使用 python 3.8 而不是 3.7 对于任何使用 python 的人解决的

A
Abe Mishler

使用 ldd (man ldd) 显示共享库依赖项。在 libqxcb.so 上运行它

.../platforms$ ldd libqxcb.so

表明 xcb 依赖于 libQt5DBus.so.5 以及 libQt5Core.so.5 和 libQt5Gui.so.5(以及许多其他系统库)。将 libQt5DBus.so.5 添加到您的共享库集合中,您应该准备好继续前进。


谢谢!这正是问题所在。 libQt5DBus.so.5 应与 core 和 gui 一起列在文档中。
在我的情况下,sudo apt-get install libx11-xcb1 解决了这个问题。但是您对使用 ldd 的建议使我找到了要安装的正确库。谢谢!
就我而言,我还必须将 libQt5XcbQpa.so.5 添加到 lib 文件夹中。
如果您在通过 ldd 后仍然遇到此问题,请尝试在 Qt 安装中查找 plugins/platforms 目录。尝试将整个目录复制到与二进制或共享库文件相同的位置。如果可行,您可以设置 LD_LIBRARY_PATH(hacky),或者如@bossbarber 的回答中所述,设置 QT_QPA_PLATFORM_PLUGIN_PATH
在我的情况下,我没有创建 /usr/bin/platforms 目录。解决方法:sudo ln -sf /usr/lib/x86_64-linux-gnu/qt5/plugins/platforms/ /usr/bin/
S
Simon Warta

如前所述,您需要确保在部署应用程序时安装平台插件。根据您想要部署的方式,有两种方法可以告诉您的应用程序平台插件(例如,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

有关这方面的更多信息,请参阅 hereat using qt.conf


哇!非常感谢!不知道qt.conf,应该在部署FAQ的第一页
就我而言,由于某种原因,无法识别 qt.conf (Plugins=plugins) 中的路径。我最终提供了一个空的 qt.conf 文件,它让全局(硬编码)路径被 qt.conf-defaults 覆盖,在我的例子中是 app-directory 中的 plugins-Subfolder。
我们想知道为什么 LD_LIBRARY_PATH 不起作用,但 QT_QPA_PLATFORM_PLUGIN_PATH 成功了。超级感谢。
我第二次或第三次来这个答案,每次都有帮助。
N
Neurotransmitter

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

起初,我按照这里的建议使用 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 感谢 this answer 的作者为 QT_DEBUG_PLUGINS=1


我发现虽然 libQt5xcbQpa.so.5 和 libQtDBus.so.5 存在未指定的依赖关系,但我仍然需要按照您的指示添加平台文件夹。这种组合使它起作用。
谁能指出我如何解决此错误的“For Dummies”解释?我不知道这些东西是什么意思,我需要逐步说明如何在 linux 中解决这个问题。
@JohnSmith,如果您告诉我们究竟什么对您没有任何意义,那就更好了。然后我们将尝试详细说明。
A
Alan

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

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/ 

这在 Ubuntu 17.10 上对我有用(但从 16.04 开始就有这个问题!)export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/x86_64-linux-gnu/。不幸的是,它只修复了我的 VLC,而不是具有相同错误的 Virtualbox...
在 Ubuntu 18.04 中工作以启动并运行 texworks 0.6.2。
F
Francesco

Ubuntu 16.04 64 位。我显然没有任何理由遇到问题。我在 VideoLan 实例上观看电影的前一天晚上,那天晚上我想用 VideoLan 再看一部电影。由于问题中的错误,VLC 只是不想运行。我谷歌了一下,我找到了解决我的问题的解决方案:从现在开始,VLC 就像以前一样可以运行。解决方案是这个命令:

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

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


在你真正知道你在做什么之前,不要使用 -f --force 标志。这可能会导致其他问题。
这就是使用 Ubuntu 18.04 为我解决的问题(有问题的应用程序是 Rescue Time。)如果您已经有一个目录,请不要使用 -f 标志。
c
cloose

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

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


那么,我只需要安装依赖项列表中的所有包吗?这会奏效吗?我还在 QT SDK 目录中找到了文件 libqxcb.so,但是将它放在 usr/lib 目录中并不能解决我的问题。
Deploying an Application on X11 Platforms 页应包含您需要的所有信息。
我安装了该页面上提到的所有软件包,但没有帮助。我找到了信息,平台插件必须位于“平台”文件夹中的可执行文件目录中。我把xcb插件放在那里,现在错误改变了:“无法加载平台插件“xcb”。可用平台是:xcb“
@close 它又死了 :(
@user89 不适合我。也许是暂时的问题?
u
untill

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

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


:facepalm: OMG,同样的建议。不,这没有提供任何有用的信息,只是同一个错误的更详细的版本。没有任何其他可以查看的提示或线索。没有任何遗漏,没有我不知道的“无法加载”。
T
Teocci

可能这些信息会有所帮助。我在 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:最后一个命令解决了我的问题。


E
Eugene Gr. Philippov

我遇到了一个非常相似的问题,带有相同的错误消息。首先,通过使用命令行命令打开 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。接下来,使用 dpkg 从 linux 命令行检查您的架构。 (对我来说,命令“arch”给出了不同且无益的结果)

dpkg --print-architecture #result for me: amd64

然后我搜索了“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 install libxkbcommon0 sudo apt-get install libxkbcommon-x11-0


v
vicrucann

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

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

解决方案很简单:通过 CMAKE_PREFIX_PATH 提供 Qt 路径,而不是像我那样通过 Qt5_DIR,它解决了问题。例子:

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


哦,伙计,Linux 世界是怎么回事,网络上的每一个解决方案都提供了意想不到的错误而不是正常工作?曾经?三天后试图在 Ubuntu 的股票安装上获得一个工作桌面。不,对于那些来自 Google 的人:这个解决方案并不比这个页面上的其他任何东西都好用。我开始认为 Linux 实际上根本不起作用。
S
Sergey P. aka azure

安装 Viber 后,我遇到了同样的问题。它在 /opt/viber/plugins/ 中有所有必需的 qt 库。我检查了 /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


我在启动 Tizen 模拟器时遇到问题。这有帮助。谢谢。
E
Eugene Gr. Philippov

我喜欢 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


而我“将 qt.conf 放在可执行文件附近”究竟如何?
使用呈现的内容创建文件。 cd path/to/executable; vim qt.conf,粘贴。保存并退出。
J
Jungwon Choi

你需要做的就是

pip uninstall PyQt5 

conda install pyqt 

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


许多年过去了,我在 WSL(即 Windows 上的 Ubuntu 20.04)下的 Qt GUI 应用程序上运行,这为我解决了这个确切的错误!
G
Giorgos Sfikas

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

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

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

解决方案?确保复制 ldd 显示为缺失的库,并且绝对没有额外的库。


而且,我使用此建议解决了我的问题,如何解决?
W
Woltan

在我的情况下,缺少头文件是 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

是的,我想我也有类似的问题。甚至从源代码编译了 qt,但没有注意到我的系统上的 xcb-toolchain 不健全,因此没有安装 qt-xcb 部件。
j
juzzlin

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


B
Blair Houghton

我遇到了这个问题,预感我从我的环境中删除了 Qt 配置。 IE,

rm -rf ~/.config/Qt*

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

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


Qtcreator 给出了我试图解决的同样的错误。当然。因为如果我在网络上找到任何 Linux 问题的有效解决方案,它就不会是 Linux。抱歉,这真是令人难以置信的令人沮丧,整个 SE 页面的野鹅追逐没有一个可用的解决方案,只是让桌面面板在股票 Ubuntu 安装上运行而没有错误。我开始怀疑 Linux 是否真的可以正常工作。
这对我来说没有帮助。
f
fatcook

尝试在 Ubuntu 20.04 上启动此功能的人请尝试运行它,看看是否能解决问题。这对我有用

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

j
jujuuj

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

它创建了它错过的符号链接。适合QT!适合 VLC !


解释你的答案
不工作。因为没有任何作用。这个页面是 100% 错误的,这里甚至没有一个“解决方案”有效。
@JohnSmith 从答案的赞成票数量来看,其中一些肯定对某些人有用。不幸的是,没有什么对你有用,我能理解你的沮丧。但是,如果没有任何效果,请尝试进行自己的研究并提交对您的情况有效的答案。我的意思是,拜托,您使用该平台 5 年,只有 6 个答案?我会谦虚地建议回馈社区而不是抱怨。我们是来互相帮助的。

关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅