我为linux编写了一个使用Qt5的应用程序。
但是当我尝试在没有安装Qt SDK的情况下在Linux上启动它时,控制台中的输出是:
无法加载平台插件“xcb”。可用的平台是:
我该如何解决这个问题?可能是我需要复制一些插件文件? 当我使用安装了Qt5的ubuntu,但是我重命名Qt目录时,会出现同样的问题。所以,它使用Qt目录中的一些文件......
更新: 当我在应用程序dir“platforms”文件夹中创建文件 libqxcb.so 时,应用程序仍然无法启动,但错误消息更改:
无法加载平台插件“xcb”。可用的平台是:
XCB
这怎么可能发生?平台插件如何可用但无法加载?
答案 0 :(得分:49)
使用ldd(man ldd)显示共享库依赖项。在libqxcb.so上运行它
.../platforms$ ldd libqxcb.so
表明除了libQt5Core.so.5和libQt5Gui.so.5(以及许多其他系统库)之外,xcb依赖于libQt5DBus.so.5。将libQt5DBus.so.5添加到您的共享库集合中,您应该已准备好继续前进。
答案 1 :(得分:45)
如前所述,您需要确保在部署应用程序时安装平台插件。根据您希望如何部署内容,有两种方法可以告诉您的应用程序平台插件(例如platforms / 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
答案 2 :(得分: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)
注意失败的libQt5DBus.so.5
库。将它复制到您的库路径,在我的情况下,它是我的二进制文件所在的目录(因此LD_LIBRARY_PATH=.
)。重复此过程,直到满足所有依赖关系。
P.S。感谢QT_DEBUG_PLUGINS=1
的作者protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
if(resultCode==RESULT_OK)
{
if(requestCode==CAMERA_REQUEST)
{
String path= (String) data.getExtras().get("data");
File file = new File(path);
}
}
}
。
答案 3 :(得分:9)
Ubuntu 16.04 64bit。 我明显没有理由得到了这个问题。我在VideoLan实例上观看电影前一天晚上,那天晚上我想用VideoLan观看另一部电影。由于问题中的错误,VLC只是不想运行。 我谷歌了一下,我发现它解决了我的问题的解决方案:从现在开始,VLC就像以前一样可以运行。解决方案就是这个命令:
Folding
我无法解释其后果是什么,但我知道它会创建一些缺失的符号链接。
答案 4 :(得分:8)
从版本5开始,Qt使用platform abstraction system (QPA)从底层平台进行抽象。
每个平台的实现都是由插件提供的。对于X11,它是XCB插件。有关依赖项的更多信息,请参阅Qt for X11 requirements。
答案 5 :(得分:8)
我尝试了每个答案的主要部分,但没有用。最后为我修复的是导出以下环境变量:
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/
答案 6 :(得分:3)
我遇到了一个非常类似的问题,并带有相同的错误消息。首先,通过使用命令行命令打开Qt Debug打印机进行调试:
导出QT_DEBUG_PLUGINS = 1
,然后重新运行该应用程序。对我来说,这揭示了以下内容:
“无法加载库/home/.../miniconda3/lib/python3.7/site-packages/PyQt5/Qt/plugins/platforms/libqxcb.so:(libxkbcommon-x11.so.0:无法打开共享库目标文件:没有这样的文件或目录)“
“无法加载库/home/.../miniconda3/lib/python3.7/site-packages/PyQt5/Qt/plugins/platforms/libqxcb.so:(libxkbcommon-x11.so.0:无法打开共享库目标文件:没有这样的文件或目录)“
确实,我缺少libxkbcommon-x11.so.0和libxkbcommon-x11.so.0。接下来,从linux命令行使用dpkg检查您的体系结构。 (对我来说,“ arch”命令给出了不同且无益的结果)
dpkg --print-architecture #result:amd64
然后我在Google上搜索了“ libxkbcommon-x11.so.0 ubuntu 18.04 amd64”,同样也搜索了libxkbcommon-x11.so.0,它在package.ubuntu.com上生成了这些软件包。毫无疑问,这告诉了我,我缺少名为libxkbcommon-x11-0和libxkbcommon0的软件包,并且安装这些软件包将包含所需的文件,但dev版本不会。然后是解决方案:
sudo apt-get更新
sudo apt-get install libxkbcommon0
sudo apt-get install libxkbcommon-x11-0
答案 7 :(得分:3)
这可能会有所帮助。我正在使用Ubuntu 18.04,并且使用ppa方法安装 Krita 时。我收到此错误:
此应用程序无法启动,因为无法在“”中找到或加载Qt平台插件“ xcb”。
可用的平台插件有:linuxfb,minimum,minimlegl,offscreen,wayland-egl,wayland,xcb。
重新安装应用程序可能会解决此问题。 中止
我尝试了在此线程和其他网站中找到的所有解决方案,但均未成功。
最后,我找到了一篇帖子,作者提到可以使用以下简单命令激活qt5的调试功能:
export QT_DEBUG_PLUGINS=1
添加此命令后,我再次运行 krita ,直到现在我仍然知道原因,我仍然遇到相同的错误。
libxcb-xinerama.so.0:无法打开共享库文件:没有这样的文件或目录。
此错误使“ xcb”无法正确加载。因此解决方案是正确安装`libxcb-xinerama.so.0“吗?但是,当我运行命令时:
sudo apt install libxcb-xinerama
我安装了lib。所以我使用了一个古老的技巧--reinstall
sudo apt install --reinstall libxcb-xinerama
最后一条命令解决了我的问题。
答案 8 :(得分:1)
在我的情况下,缺少头文件是{t {1}}不是Qt构建的原因。根据{{3}}安装它们可以解决此问题:
libxcb
答案 9 :(得分:1)
因此,我花了大约一天的时间来弄清楚问题出在哪里;尝试了所有建议的解决方案,但没有一个能像安装xcb库或导出Qt plugins文件夹那样工作。建议使用QT_DEBUG_PLUGINS=1
来调试问题的解决方案并没有像答案中那样为我提供直接的见解-而是我从Qt5Core中获得了有关未解析符号的信息。
这给了我一个提示:如果它试图使用来自不同Qt安装的不同文件怎么办?在我的机器上,我在/home/username/Qt/
中安装了标准版本,并且在我的项目中由我自己编译了一些本地版本(在其他位置也有其他自定义生成的工具包)。每当我尝试使用任何套件(由Qt维护工具安装或由我自己构建)时,都会出现“ xcb错误”。
解决方案很简单:通过CMAKE_PREFIX_PATH
而不是像我一样通过Qt5_DIR
提供Qt路径,它解决了问题。示例:
cmake .. -DCMAKE_PREFIX_PATH=/home/username/Qt/5.11.1/gcc_64
答案 10 :(得分:1)
安装Viber后我遇到了同样的问题。它在/opt/viber/plugins/
中都需要qt库。
我检查了/opt/viber/plugins/platforms/libqxcb.so
的依赖项,发现缺少依赖项。他们是libxcb-render.so.0
,libxcb-image.so.0
,libxcb-icccm.so.4
,libxcb-xkb.so.1
所以我通过使用这个库安装缺少的包解决了我的问题:
apt-get install libxcb-xkb1 libxcb-icccm4 libxcb-image0 libxcb-render-util0
答案 11 :(得分:1)
就我而言,我需要在Ubuntu virtualbox guest上部署两个Qt应用程序。一个是命令行(“app”),另一个是GUI_based(“app_GUI”)。
我用“ldd app”找出所需的库是什么,然后复制它们 到Ubuntu的客人。 虽然命令行可执行文件“app”工作正常,但基于GUI的可执行文件崩溃了,给出了 “无法加载平台插件”xcb“错误。我检查了ldd for libxcb.so,但这也没有丢失依赖项。
问题似乎是,当我复制了所有正确的库时,我偶然也复制了已经存在于客户系统的库..这意味着(a)他们不需要首先复制它们( b)更糟糕的是,复制它们会在安装库之间产生不兼容性。 更糟糕的是,就像我说的那样,ldd无法检测到它们。
解决方案?确保复制ldd缺少的库和绝对没有额外的库。
答案 12 :(得分:0)
答案 13 :(得分:0)
我遇到了这个问题,并且直觉上我从我的环境中删除了Qt Configs。即
rm -rf ~/.config/Qt*
然后,我启动了qtcreator,并使用计算机的现有状态对其进行了重新配置。它不再想起我的项目在哪里,但这只是意味着我不得不“第一次”浏览它们。
但更重要的是,它自己构建了一套连贯的库路径,因此我可以重新构建并运行我的项目可执行文件,而不会丢失xcb或qxcb库。
答案 14 :(得分:0)
可能有很多原因导致此问题。关键是要使用
export QT_DEBUG_PLUGINS=1
在运行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))
但这在不同的线程中得到解决。例如参见https://stackoverflow.com/a/50097275/2408964。
答案 15 :(得分:0)
我将所有Qt内容静态链接到我的开源项目的通用Linux版本。它让生活变得更轻松。您只需要首先构建静态版本的Qt库。当然,由于许可问题,这不能应用于封闭源软件。在Linux上部署Qt5应用程序目前有点问题,因为例如Ubuntu 12.04在软件包存储库中没有Qt5库。
答案 16 :(得分:-4)
sudo ln -sf /usr/lib/...."adapt-it"..../qt5/plugins/platforms/ / usr / bin /
它创建了它错过的符号链接。对QT有好处!适合VLC !!