116

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

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

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

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

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

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

xcb

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

4

19 回答 19

63

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

.../platforms$ ldd libqxcb.so

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

于 2013-08-30T12:05:47.923 回答
58

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

于 2014-08-22T00:03:18.087 回答
30

我尝试在预装了 Qt5.7的 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

于 2016-09-27T12:58:42.210 回答
14

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

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/ 
于 2017-08-14T16:33:31.760 回答
12

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

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

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

于 2016-10-19T19:04:12.133 回答
8

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

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

于 2013-06-14T10:47:17.793 回答
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

于 2019-02-04T09:56:51.193 回答
6

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

于 2018-07-12T03:52:43.990 回答
3

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

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

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

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

于 2018-07-18T16:37:21.263 回答
3

我遇到了一个非常相似的问题,带有相同的错误消息。首先,通过使用命令行命令打开 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

于 2020-03-12T21:37:58.533 回答
2

安装 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

于 2016-06-17T19:38:04.877 回答
2

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

于 2018-02-07T08:44:55.843 回答
1

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

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

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

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

于 2015-11-28T14:25:08.117 回答
1

在我的情况下,缺少头文件是libxcbQt 没有构建的原因。根据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
于 2020-04-04T16:24:45.993 回答
1

你需要做的就是

pip uninstall PyQt5 

conda install pyqt 

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

于 2021-10-15T00:35:37.923 回答
0

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

于 2013-12-26T00:21:13.340 回答
0

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

rm -rf ~/.config/Qt*

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

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

于 2018-08-31T15:41:33.307 回答
0

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

sudo apt-get update -y
sudo apt-get install -y libxcb-xinerama0
于 2021-11-24T12:40:47.483 回答
-4

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

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

于 2017-02-02T02:06:12.630 回答