我为linux写了一个使用Qt5的应用程序。
但是,当我尝试在没有安装Qt SDK的linux上启动它时,控制台中的输出是:
无法加载平台插件"xcb“。可用的平台包括:
我该如何解决这个问题呢?也许我需要复制一些插件文件?当我使用安装了Qt5的ubuntu,但是我重命名了Qt目录,同样的问题也发生了。所以,它使用了Qt目录中的一些文件...
更新:当我在应用目录"platforms“文件夹中创建libqxcb.so文件时,应用仍然无法启动,但错误消息发生了变化:
无法加载平台插件"xcb“。可用的平台包括:
xcb
这怎么会发生呢?为什么平台插件可用但不能加载?
发布于 2013-08-30 20:05:48
使用ldd (man ldd)显示共享库依赖项。在libqxcb.so上运行此程序
.../platforms$ ldd libqxcb.so
显示了除了libQt5Core.so.5和libQt5Gui.so.5 (以及许多其他系统库)之外,xcb还依赖于libQt5DBus.so.5。将libQt5DBus.so.5添加到您的共享库集合中,您应该已经准备好继续下一步。
发布于 2014-08-22 08:03:18
如前所述,您需要确保在部署应用程序时安装了平台插件。根据你想要部署东西的方式,有两种方法可以在运行时告诉你的应用程序平台插件(例如platform / 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
有关这方面的更多信息,请访问here和at using qt.conf
发布于 2016-09-27 20:58:42
我尝试在预装了Qt 5.7
的Ubuntu16.04LTS上启动用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=.
)。重复此过程,直到满足所有依赖项为止。
另外,感谢QT_DEBUG_PLUGINS=1
的this answer的作者。
https://stackoverflow.com/questions/17106315
复制相似问题