我编写了使用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添加到您的共享库集合中,您应该已准备好继续前进.
小智 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/
我无法解释它的后果,但我知道它会产生一些缺失的符号链接.
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)
这个问题可能有很多原因。关键是用
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/。
可能会有所帮助。我正在使用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)
最后一条命令解决了我的问题。
| 归档时间: |
|
| 查看次数: |
188694 次 |
| 最近记录: |