2015-04-02 374 views
3

我重新安装了我的ubuntu 14.04和Qt 5.4.1和Qtcreator。(Qt 5.4.1)此应用程序无法启动,因为它无法找到或加载Qt平台插件“xcb”

Qt 5.4.1是使用“-opensource -nomake-test -nomake-example”配置选项从源代码构建的。

当我在QtCreator中打开一个旧项目并构建它时,一切正常。

但是当我运行这个项目它显示:

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

可用的平台插件是:linuxfb,minimal,offscreen,xcb。

重新安装应用程序可能会解决此问题。 Aborted(核心转储)

因此,我搜索了这个问题,并尝试了一切。 我安装了每个软件包(libxcb系列),但没有任何帮助!

有人帮我请...

我试过你的方法。

当我platform目录中运行ldd命令,它显示: ldd libqxcb.so under platform$

你可以看到有没有遗漏。实际上,我在名为libqxcb.so的平台目录中创建了一个softlink。之前我的平台目录中没有libqxcb.so。

而当我运行ldd命令到我的可执行文件。它显示: executable shot

而你可以看到我执行这个文件时的错误。

+0

您是否阅读过有关部署的官方文档?你在谷歌使用了什么请求? – 2015-04-02 06:51:28

+1

我阅读[本页](http://doc.qt.io/qt-5/linux-requirements.html)并安装了它提到的所有软件包,但没有发生任何事情。我搜索谷歌使用“此应用程序无法启动,因为它无法找到或加载Qt平台插件'xcb'”请求。 – HYSuperman 2015-04-02 08:45:43

+0

http://doc.qt.io/qt-5/linux-deployment.html#application-dependencies – 2015-04-02 10:09:44

回答

7

尝试转到您的程序正在使用的Qt安装的platforms文件夹,并在命令提示符下运行ldd libqxcb.so。然后检查输出是否有任何缺失的依赖关系。如果libqxcb.so缺少其某个依赖项,则会生成您提到的输出。

您还可以在您的可执行文件上使用ldd命令来检查是否存在任何无法找到的依赖关系。

这里是什么缺少的依赖关系看起来像在ldd输出的例子:

Example of <code>ldd</code> output

PS:的this问题接受的答案也可以帮助你(创建一个qt.conf文件)。

+0

我进入'platform'目录并运行'ldd libqxcb.so'命令。每个依赖关系都被发现,没有任何东西丢失。我也运行'ldd'我的可执行文件,但是没有依赖'libqxcb.so'。非常奇怪...... – HYSuperman 2015-04-02 11:23:13

+0

这是因为libxcb.so在启动时动态链接,而ldd只能检测静态链接的库。如果平台目录中没有libxcb.so,它可能没有构建,或者没有安装,请仔细检查配置日志以查看发生了什么。软链接是100%错误的。 – HappyCactus 2015-04-02 14:37:03

2

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

查看随附的网页,向下滚动到标题“Qt插件”。见第一段。

即使您静态链接其余部分,libqxcb.so也是必需的。

http://doc.qt.io/qt-5/linux-deployment.html#application-dependencies

的Qt可能已经编写自己的源代码软件,以下列方式工作: 与其让libqxcb.so在启动时自动(使用rpath中的),他们使用的dlopen()函数来加载被加载的它作为QPA函数集的一部分,在main()开始之后不久。

因此,这完全无视我们尝试静态包含所有“xcb”功能。

如果他们的dlopen()失败,他们只是抛出他们的错误信息,我们都知道并憎恨,然后调用信号6放弃它(相当不必要),而不是正常退出。

+1

但是,请注意,您可以使用'qt.conf'文件覆盖'dlopen'使用的路径(我认为)。 – 2016-06-07 00:40:55

4

我刚刚插入一个非常类似的issue几个小时,ldd结果在相关的可执行文件或libqxcb.so上也没有找到。最后我发现这是可执行文件本身的问题,但不是Qt。尝试QT_QPA_PLATFORM='' executable和它的作品:)

+0

Thx。我有phantom.js这个问题,但他们似乎忽略它:https://github.com/ariya/phantomjs/issues/14377 – JepZ 2017-02-06 03:04:43

+0

在debian伸展上也为我工作。关于此的另一个报告可以在这里找到:https://forum.antergos.com/topic/5239/phantomjs-complains-about-missing-qt-platform-plugin-xcb/3 – 2017-08-03 10:02:30

8

对于类似的问题,在我的情况我解决了:

export QT_PLUGIN_PATH=<qt base path>/plugins 
+0

不能相信我必须搜索很长时间才找到这个解决方案。你是怎么弄出来的? – Haffi112 2017-01-16 19:39:04

+0

实际上在其他类似的问题中阅读它在计算器中。 – mbjoe 2017-01-17 08:02:27

0

使命令:sudo的./app-name -platform linuxfb

0

export QT_PLUGIN_PATH=<your qt installation path>/plugins/platforms

与mbjoe所说的相似,它确实有效!

相关问题