"在没有安装qt的Linux上启动qt5 app时,无法加载平台插件"xcb""

loc*_*ion 88 linux qt xcb

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

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

无法加载平台插件"xcb".可用的平台是:

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

更新:当我在app dir"platforms"文件夹中创建文件libqxcb.so时,应用程序仍然无法启动,但错误消息更改:

无法加载平台插件"xcb".可用的平台是:

XCB

怎么会发生这种情况?平台插件如何可用但无法加载?

小智 54

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

.../platforms$ ldd libqxcb.so
Run Code Online (Sandbox Code Playgroud)

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

  • 就我而言,`sudo apt-get install libx11-xcb1`解决了这个问题。但是您对使用ldd的建议是使我指向要安装的正确库的原因。谢谢! (3认同)
  • 在我的情况下,我还必须将**libQt5XcbQpa.so.5**添加到lib文件夹中. (3认同)
  • 如果您在经过ldd之后仍然存在此问题,请尝试在Qt安装中找到目录plugins / platforms。尝试将整个目录复制到二进制或共享库文件所在的位置。如果可行,您可以设置“ LD_LIBRARY_PATH”(hacky),或者设置为“ QT_QPA_PLATFORM_PLUGIN_PATH”,如@bossbarber的回答所述。 (2认同)

小智 51

如前所述,您需要确保在部署应用程序时安装平台插件.根据您希望如何部署内容,有两种方法可以告诉您的应用程序平台插件(例如platform/plugins/libqxcb.so)在运行时可能适合您.

第一种是通过QT_QPA_PLATFORM_PLUGIN_PATH变量将路径导出到目录.

QT_QPA_PLATFORM_PLUGIN_PATH=path/to/plugins ./my_qt_app
Run Code Online (Sandbox Code Playgroud)

要么

export QT_QPA_PLATFORM_PLUGIN_PATH=path/to/plugins
./my_qt_app
Run Code Online (Sandbox Code Playgroud)

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

[Paths]
Plugins=/path/to/plugins
Run Code Online (Sandbox Code Playgroud)

有关这方面的更多信息可以在这里使用qt.conf找到


Tra*_*oud 19

我尝试在Ubuntu 16.04 LTS上使用Qt 5.7编译我的二进制文件,其中预装了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)
Run Code Online (Sandbox Code Playgroud)

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

PS感谢笔者这个答案QT_DEBUG_PLUGINS=1.


Fra*_*sco 10

Ubuntu 16.04 64bit.我明显没有理由得到了这个问题.我在VideoLan实例上观看电影前一天晚上,那天晚上我想用VideoLan观看另一部电影.由于错误进入问题,VLC只是不想运行.我谷歌了一下,我发现它解决了我的问题的解决方案:从现在开始,VLC就像以前一样可以运行.解决方案就是这个命令:

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

我无法解释它的后果,但我知道它会产生一些缺失的符号链接.

  • 在U真正知道您在做什么之前,不要使用-f标志--force。这可能会导致其他问题。 (2认同)

Ala*_*lan 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/ 
Run Code Online (Sandbox Code Playgroud)

  • 这对我在 Ubuntu 17.10 上有效(但从 16.04 开始就有这个问题!) ```export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/x86_64-linux-gnu/```。不幸的是,它只修复了我的 VLC,而不是具有相同错误的 Virtualbox... (2认同)

clo*_*ose 8

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

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


unt*_*ill 6

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

export QT_DEBUG_PLUGINS=1
Run Code Online (Sandbox Code Playgroud)

在运行 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))
Run Code Online (Sandbox Code Playgroud)

但这在不同的线程中解决了。参见例如/sf/answers/3506809281/

  • :facepalm: 天啊,同样的建议又来了。不,这不提供任何有用的信息,只是相同错误的更详细版本。没有任何其他可看的提示或线索。没有丢失任何东西,没有我不知道的“无法加载”的东西。 (2认同)

Teo*_*cci 5

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

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

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

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

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

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

export QT_DEBUG_PLUGINS=1
Run Code Online (Sandbox Code Playgroud)

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

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

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

sudo apt install libxcb-xinerama
Run Code Online (Sandbox Code Playgroud)

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

sudo apt install --reinstall libxcb-xinerama
Run Code Online (Sandbox Code Playgroud)

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