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


101

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

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

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

我怎样才能解决这个问题?可能需要复制一些插件文件吗?当我在安装了Qt5的情况下使用ubuntu时,但我重命名了Qt目录时,也会发生相同的问题。因此,它使用了Qt目录中的一些文件...

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

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

xcb

怎么会这样 平台插件如何可用但无法加载?


1
只是为了澄清一下,实际上安装了Qt库吗?
cmannett85 2013年

1
如果安装了Qt库,则程序可以正常运行。如果尚未安装,或者找不到qt sdk目录,则该程序将无法运行。
locomotion

确保您也复制了libQt5Gui.so.5
edaniels 2013年

1
对于那些来自Eve Online启动器的用户:使用eveonline.sh,而不是eveonline-启动器将所有库与特殊版本捆绑在一起。
OndraŽižka17年

Answers:


59

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

.../platforms$ ldd libqxcb.so

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


1
谢谢!这正是问题所在。libQt5DBus.so.5应该与核心和gui一起在文档中列出。
dzlatkov 2014年

4
就我而言,sudo apt-get install libx11-xcb1解决了这个问题。但是您对使用的建议是使ldd我指向要安装的正确库的原因。谢谢!
丹尼尔(Daniel)

4
就我而言,我还必须将libQt5XcbQpa.so.5添加到lib文件夹中。
elsamuko,2015年

4
如果完成后仍然遇到此问题ldd,请尝试plugins/platforms在Qt安装中查找目录。尝试将整个目录复制到二进制或共享库文件所在的位置。如果LD_LIBRARY_PATH可行,您可以设置(hacky)或如@bossbarber的答案中所述QT_QPA_PLATFORM_PLUGIN_PATH
csl

1
就我而言,我没有创建/ usr / bin / platforms目录。解决:sudo ln -sf / usr / lib / x86_64-linux-gnu / qt5 / plugins / platforms / / usr / bin /
gipsh

55

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


1
哇!非常感谢!不知道qt.conf,它应该在部署常见问题解答的第一页上

在我的情况下,由于某种原因,无法识别qt.conf(Plugins = plugins)内部的路径。最后,我提供了一个空的qt.conf文件,该文件允许使用qt.conf-defaults覆盖全局(硬编码)路径,在我的情况下,该路径是app目录中的plugins-Subfolder。
B Piltz

1
我们想知道为什么LD_LIBRARY_PATH不起作用,但是QT_QPA_PLATFORM_PLUGIN_PATH成功了。超级谢谢。
艾哈迈德·法西

1
第2或3遍,我得到了这个答案,每次都会对您有帮助。
kyb

26

我试图5.75.5预先安装了Qt的Ubuntu 16.04 LTS上启动使用Qt编译的二进制文件。没用

首先,我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


1
我发现,尽管对libQt5xcbQpa.so.5和libQtDBus.so.5有未指定的依赖性,但仍然需要按照您的指示添加platform文件夹。这种组合使其有效。
BSD

谁能指出我对解决此错误的“傻瓜”解释?我不知道这些东西是什么意思,我需要逐步说明如何在Linux中解决此问题。
约翰·史密斯

@JohnSmith最好告诉我们什么对您毫无意义。然后我们将尝试详细说明。
神经递质

11

Ubuntu 16.04 64位。我显然没有任何问题。在我在VideoLan实例上观看电影的前一天晚上,那天晚上我想在VideoLan上观看另一部电影。VLC只是不想运行,因为问题出了错。我在Google上搜索了一下,然后找到了解决我问题的解决方案:从现在开始,VLC就像以前一样可运行。解决方法是此命令:

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

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


2
-f --forceU真正知道您在做什么之前,不要使用flag。这可能会导致其他问题。
kyb

这就是Ubuntu 18.04(有问题的应用程序是Rescue Time)为我解决的问题。如果您已经有目录了,就不要使用-f标志。
Eloff

10

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

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 ...
Tails

在Ubuntu 18.04中工作,以启动并运行texworks 0.6.2。
XavierStuvw

8

从版本5开始,Qt使用平台抽象系统(QPA)从基础平台抽象。

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


因此,我只需要安装依赖项列表中的所有软件包?这行得通吗?另外,我在QT SDK目录中找到了文件libqxcb.so,但是将其放在usr / lib目录中并不能解决我的问题。
locomotion

在X11平台部署应用程序页面应包含您需要的所有信息。
cloose

我安装了该页面上提到的所有软件包,但没有帮助。我发现了以下信息:平台插件必须位于文件夹“ platforms”中的可执行文件目录中。我放了xcb插件,现在错误发生了变化:“无法加载平台插件“ xcb”。可用的平台是:xcb”
locomotion

1
@cloose又死了:(
user89 2015年

@ user89不适合我。暂时的问题吧?
cloose 2015年

6

可能会有所帮助。我正在使用Ubuntu 18.04,并且使用ppa方法安装Krita时。我收到此错误:

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

可用的平台插件为:linuxfb,minimum,minimlegl,offscreen,wayland-egl,wayland,xcb。

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

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

最后,我找到了一个帖子,作者在其中提到可以使用以下简单命令激活qt5的调试信息:

export QT_DEBUG_PLUGINS=1

添加此命令后,我再次运行krita,但现在我仍然知道同样的原因,但收到相同的错误。

libxcb-xinerama.so.0:无法打开共享库文件:没有这样的文件或目录。

此错误使“ xcb”无法正确加载。因此解决方案是正确安装`libxcb-xinerama.so.0“吗?但是,当我运行命令时:

sudo apt install libxcb-xinerama

我的库已安装。所以我用了一个老把戏--reinstall

sudo apt install --reinstall libxcb-xinerama

最后一条命令解决了我的问题。


6

可能有很多原因导致此问题。关键是要用

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,同样的建议。不,这没有提供任何有用的信息,只是相同确切错误的详细版本。没有其他任何提示的线索。没有什么,没有什么我无法知道的“无法加载”。
约翰·史密斯

2

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


我启动Tizen Emulator时遇到问题。这有帮助。谢谢。
AlexM '17

2

因此,我花了大约一天的时间来弄清楚问题出在哪里。尝试了所有建议的解决方案,但都没有像安装xcb库或导出Qt plugins文件夹那样起作用。建议用于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


哦,伙计,在Linux世界中,网络上的每个解决方案都会出现意想不到的错误而不起作用,这是什么呢?曾经吗 现在,三天的时间试图在普通版的Ubuntu上获得可正常使用的桌面。不,对于那些来自Google的用户:此解决方案的效果没有比此页面上的其他任何方法更好。我开始认为Linux实际上根本无法工作。
约翰·史密斯

2

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

然后,我用谷歌搜索“ libxkbcommon-x11.so.0 ubuntu 18.04 amd64”,同样搜索libxkbcommon-x11.so.0,这在package.ubuntu.com上产生了这些软件包。毫无疑问,这告诉了我,我缺少名为libxkbcommon-x11-0和libxkbcommon0的软件包,并且安装这些软件包将包含所需的文件,但dev版本不会。然后的解决方案:

sudo apt-get更新

须藤apt-get install libxkbcommon0

须藤apt-get install libxkbcommon-x11-0


1

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

我使用“ ldd应用程序”找出所需的库,然后将它们复制到Ubuntu来宾。 当命令行可执行文件“ app”运行正常时,基于GUI的可执行文件崩溃,出现“无法加载平台插件“ xcb”错误

问题似乎是,当我确实复制了所有正确的库时,我不小心也复制了来宾系统中已经存在的库。 ,将它们复制会导致安装库之间不兼容。更糟糕的是,就像我说的那样,它们无法被ldd检测到。

解决方案?确保您复制了ldd显示为丢失的库,并且绝对没有多余的库


而且,我使用此建议解决了问题,如何?
约翰·史密斯

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

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

1

我喜欢的解决方案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,粘贴。保存并退出。
kyb

相同的链接已经在答案中
kyb

0

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


0

我遇到了这个问题,并且预感我从环境中删除了Qt Configs。即

rm -rf ~/.config/Qt*

然后,我启动了qtcreator,并使用计算机的现有状态对其进行了重新配置。它不再记得我的项目在哪里,但这只是意味着我不得不“第一次”浏览它们。

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


Qtcreator给出了我要解决的相同错误。当然。因为如果我在网上找到了尽可能多的解决Linux问题的可行解决方案,那就不是Linux。抱歉,这令人难以置信,整个SE页面上都没有任何可用的解决方案,只能在Ubuntu普通安装的桌面面板上运行桌面,而不会出现任何错误。我对Linux实际上完全可以正常工作感到非常怀疑。
约翰·史密斯

这对我的情况没有帮助。
尤金(Eugene Gr)。Philippov

-4

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

它创建它丢失的符号链接。对QT有好处!非常适合VLC!


2
解释你的答案
Anantha Raju C

不起作用 因为什么都没有。此页面100%错误,这里甚至没有一个“解决方案”有效。
约翰·史密斯

@JohnSmith从对答案的投票数量来看,其中某些肯定对某些人有用。不幸的是,对您没有任何帮助,我可以理解您的无奈。但是,如果没有任何效果,请尝试进行自己的研究并提交适合您情况的答案。我的意思是,拜托,您使用该平台已有5年了,只有6个答案?我会谦虚地建议回馈社区,而不要抱怨。我们在这里互相帮助。
神经递质
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.