【问题标题】:platform plugin libqxcb.so found but can not find Qt libs. (Deploying Qt application for Linux with Dynamic linking)找到平台插件 libqxcb.so 但找不到 Qt 库。 (使用动态链接为 Linux 部署 Qt 应用程序)
【发布时间】:2016-11-23 11:59:16
【问题描述】:

我正在尝试使用动态链接为 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 库。我的application.exe可以通过rpath在pro文件中找到所有的qt库,所以只有平台插件找不到qt库。

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

【问题讨论】:

  • 你从终端运行什么命令?
  • 我在收到错误消息时运行了 ./application 命令。并运行 ldd ./application 并看到它可以找到 qt 库。并且 ldd ./libqxcb.so 并看到它找不到 qt 库但依赖于它们,也许这不是问题?
  • 如果将带有 Qt 库的文件夹添加到 LD_LIBRARY_PATH,应用程序会启动吗?

标签: linux qt


【解决方案1】:

我已经通过使用来自http://doc.qt.io/qt-5/linux-deployment.html 的启动脚本启动应用程序解决了这个问题。但是,如果有人对如何在不使用脚本的情况下解决它有任何想法,我想听听如何。在 qt 文档中,与上面的链接相同,它说应该可以只使用 rpath 来完成。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      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 库不同。 em>

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

      $ 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 环境变量中:

      $ 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 应用程序工作了!

      【讨论】:

        【解决方案4】:

        在 Debian 上: pip install pyqt5==5.15.2 暂时有效

        【讨论】:

          猜你喜欢
          • 2020-10-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-04-28
          • 1970-01-01
          • 2018-05-17
          相关资源
          最近更新 更多