当前位置: 首页 > 知识库问答 >
问题:

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

居英资
2023-03-14

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

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

加载平台插件“xcb”失败。可用平台有:

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

更新:当我在应用目录"平台"文件夹中创建文件libqxcb.so时,应用仍然没有启动,但是错误消息发生了变化:

加载平台插件“xcb”失败。可用平台有:

xcb公司

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

共有3个答案

常翰
2023-03-14

我试图在预装了Qt的Ubuntu 16.04 LTS上启动用Qt编译的二进制文件。它不起作用。

首先,我按照这里的建议,用ldd检查了二进制文件本身,并满足了所有“未找到”的依赖关系。然后,这个臭名昭著的应用程序未能启动,因为它无法找到或加载Qt平台插件“xcb”错误被抛出。

首先,您应该在二进制文件所在的目录中创建平台,因为它是Qt查找XCB库的地方。复制libqxcb。所以这里。我想知道为什么其他答案的作者没有提到这一点。

然后,您可能希望使用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。所以5库。将其复制到库路径,在我的情况下,它与二进制文件所在的目录相同(因此LD\u LIBRARY\u path=。)。重复此过程,直到满足所有依存关系。

附言:感谢QT_DEBUG_PLUGINS=1的作者。

柴寂离
2023-03-14

如前所述,您需要确保在部署应用程序时安装平台插件。根据您想要部署的方式,有两种方法可以告诉您的应用程序平台插件(例如,platforms/plugins/libqxcb.so)在运行时的位置,这可能适合您。

第一个是通过QT\u QPA\u PLATFORM\u PLUGIN\u 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。形态

沈伟
2023-03-14

使用ldd(man ldd)显示共享库依存关系。在libqxcb上运行。所以

.../platforms$ ldd libqxcb.so

表明xcb依赖于libQt5DBus。所以5除libQt5Core外。所以5和libQt5Gui。所以5(和许多其他系统LIB)。添加libQt5DBus。所以5到你的共享库,你应该准备好继续前进。

 类似资料:
  • 问题内容: 我为使用Qt5的Linux编写了应用程序。 但是,当我尝试在未安装Qt SDK的Linux上启动它时,控制台中的输出为: 无法加载平台插件“ xcb”。可用的平台有: 我怎样才能解决这个问题?可能需要复制一些插件文件吗?当我在安装了Qt5的情况下使用ubuntu时,但我重命名了Qt目录时,也会发生相同的问题。因此,它使用了Qt目录中的一些文件… 更新:当我在应用程序目录“ platfo

  • 我有一个Spring Boot应用程序,其中有一个Kafka消费者和生产者。还有一个bean来创建主题。 我的Spring Boot应用程序和Kafka都是在Kubernetes的Docker启动的。有时Spring Boot应用程序在Kafka pod启动之前就启动了,因此无法启动,因为用户无法连接(参见stacktrace)。 有没有一种方法可以让我的应用程序以弹性的方式启动?例如,消费者应该

  • 我正在开发一个应用程序,它也可以从另一个应用程序启动。姑且称之为“被叫app”和“主叫app”。我正在使用protection level“signature”向“被调用的应用程序”的启动器活动添加权限。但是,当我添加此权限时,我无法从应用程序图标启动“被调用的应用程序”。上面写着“App未安装”。我还尝试使用“危险”保护级别。它给出了同样的错误。 我想这个问题可能是因为我给启动器活动提供了一个自

  • 问题内容: 我写了一个Qt应用程序,它将在Linux上运行。它应该在启动时运行。 它应该在每个Linux- Suse,RedHat等上运行。 我应该写什么脚本,放在哪里? 我根本不知道如何编写脚本,因此,如果您附上示例,我将不胜感激。 问题答案: 您需要为您的应用程序创建一个桌面入口文件(请参阅此处),并将其放置在用户目录中。 Window Manager启动时,该目录中的任何桌面条目文件都将被执

  • 以下链接可供参考。https://github.com/googlesamples/android-dynamic-features

  • 杀死应用程序并发送推送,它正在重定向到所需的活动后,处理这个推送,把应用程序放在后台并发送推送。它将恢复最后一个活动,但意向性附加为NULL。