在未安装 qt 的 Linux 上启动 qt5 应用程序时出现“无法加载平台插件“xcb””
- 2024-10-10 09:29:00
- admin 原创
- 90
问题描述:
我编写了使用 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.7
Qt 的 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.0
、libxcb-image.so.0
、libxcb-icccm.so.4
,libxcb-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 来说很好!
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件