平台插件libqxcb.so已找到,但找不到Qt-libs.(使用动态链接为Linux部署Qt应用程序)



我正在尝试为Linux(Debian)部署一个具有动态链接的Qt5应用程序。我的应用程序在Ubuntu上运行良好,所有依赖项都运行良好。我的应用程序包如下:

 - application.exe
 - qt.conf
 - libicudata.so.54
 - libicui18n.so.54
 - libicuuc.so.54
 - libQt5Core.so.5
 - libQt5DBus.so.5
 - libQt5XcbQpa.so.5
 - libQt5Gui.so.5
 - libQt5Widgets.so.5
 - platforms / libqxcb.so

当我在Debian上从终端运行它时,我会收到以下错误消息:

此应用程序无法启动,因为找不到或者加载Qt平台插件"xcb"。

可用的平台插件有:xcb。

重新安装应用程序可以解决此问题。中止

然后我在libqxcb.so上运行ldd,发现在主文件夹中找不到qt-libs。我的application.exe可以通过rpath在pro文件中找到所有qt-lib,所以只有平台插件找不到qt-lib。

如何为平台插件设置Qt-libs的路径?

我在Ubuntu和Debian上运行依赖PyQt5作为GUI的Python应用程序时遇到了同样的问题:

qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in ""
even though it was found. This application failed to start because
no Qt platform plugin could be initialized. Reinstalling the
application may fix this problem.

我在Ubuntu上很容易就搞定了。对Debian的修复要困难得多。以下是我的解决方案。

免责声明
我不是一个经验丰富的Linux用户。如果"解决方案"或多或少是用胶带缝合在一起的,请原谅我

1.Ubuntu

在Ubuntu上,我用这个解决方案很快修复了它:

$ sudo apt-get install --reinstall libxcb-xinerama0

2.Debian

关于Debian,我花了很长时间才找到解决方案。我首先尝试了在这个页面上找到的几个东西:https://askubuntu.com/questions/308128/failed-to-load-platform-plugin-xcb-while-launching-qt5-app-on-linux-without

类似:

$ sudo apt-get --reinstall install libxcb-util1
$ sudo apt-get --reinstall install libqt5x11extras5
$ sudo apt-get --reinstall install libqt5dbus5
$ sudo apt-get --reinstall install libqt5widgets5
$ sudo apt-get --reinstall install libqt5network5
$ sudo apt-get --reinstall install libqt5gui5
$ sudo apt-get --reinstall install libqt5core5a
$ sudo apt-get --reinstall install libdouble-conversion1
$ sudo apt-get --reinstall install libxcb-xinerama0
$ sudo apt-get --reinstall install '^libxcb.*-dev'
$ sudo apt-get --reinstall install '^libxcb-util.*-dev'

没有任何帮助。我想知道:这是否与我在Debian机器上部署Python3.9 venv有关?在Ubuntu上,我使用的是原生Python3.8,所以我想所有的安装和重新安装都很好。但对于虚拟环境来说,这可能就不那么简单了?

我的理论:我相信虚拟环境有自己的Qt5库存储在某个地方,所有的安装和重新安装都发生在";"本地";Qt5库-不同于虚拟环境中的Qt5

无论如何,我终于尝试了这个:

$ ldd ~/Python-3.9.2/py3.9.2-env/lib/python3.9/site-packages/PyQt5/Qt/plugins/platforms/libqxcb.so | grep "not found"
    libxcb-util.so.1 => not found
    libxcb-util.so.1 => not found

此命令计算给定.so文件缺少的依赖项。然后我从这个网页下载了libxcb-util.so.1libxcb-util.so.1.0.0

https://software.opensuse.org//download.html?project=home%3Astevenpusser%3Alibxcb-util1&package=libxcb-util1-

我在这个论坛上找到的:

http://forums.debian.net/viewtopic.php?f=6&t=135672

我将libxcb-util.so.1libxcb-util.so.1.0.0都添加到~/Python-3.9.2/py3.9.2-env/lib/python3.9/site-packages/PyQt5/Qt/plugins/platforms/文件夹中,然后将此文件夹添加到我的$LD_LIBRARY_PATH env变量:

$ export LD_LIBRARY_PATH=/home/johan/Python-3.9.2/py3.9.2-env/lib/python3.9/site-packages/PyQt5/Qt/plugins/platforms:$LD_LIBRARY_PATH

最后,python应用程序可以工作了!

我已经通过从http://doc.qt.io/qt-5/linux-deployment.html.但如果有人知道如何在不使用脚本的情况下解决问题,我很想听听如何解决。在qt-doc上,与上面的链接相同,它说应该可以只使用rpath。

我在尝试部署QT应用程序时也遇到了这个错误。尝试在Qt安装中查找plugins/platforms文件夹。对我来说是..Qt5.7.0/5.7/gcc_64/plugins/platforms

platforms文件夹复制到存储.so的文件夹对我来说很有效。哦!并且不要忘记添加LD_LIBRARY_PATH=/folder_With_.so_and_Platform

关于debian:pip install pyqt5==5.15.2适用于

最新更新