【问题标题】:After installing Qt 5.8 all qt applications stopped working安装 Qt 5.8 后,所有 qt 应用程序都停止工作
【发布时间】:2017-05-12 09:57:23
【问题描述】:

大家!

我有点问题。我的操作系统是 Ubuntu 16.04 LTS x64。 Apt 仅提供 Qt 5.5.1 作为最新版本,但我需要将 Qt 安装在 5.6 以上(我已经使用 Qt 5.8),因为我需要编译其中一个内部工具(需要 Qt >=5.6)。

但是在安装 Qt 5.8 之后(不幸的是,我使用了他们网站上建议的安装程序,而不是从 git 存储库编译它)我犯了一个战略错误。系统没有接它,但我没有为 qtchooser 设置额外的配置文件,而是决定将所有库复制到 /usr/bin/x86_64-linux-gnu,包括更改所有 libQt5*.so.5 符号链接。我不知道我为什么要这样做……可能是我喝醉了,或者只是太累了……但现在我意识到,这很愚蠢。

之后我卸载了 Qt5.8,留下了原来的 Qt5.5.1 和 Qt 4.8.7(都通过 apt 安装)。

问题是,在那之后,来自 apt 存储库的所有(至少,似乎是所有)qt 应用程序停止工作并出现以下错误:

:~$ retext
Using configuration file: ~/.config/ReText project/ReText.conf
This application failed to start because it could not find or load the       Qt platform plugin "xcb".

Reinstalling the application may fix this problem.
Aborted (core dumped)

我测试了 retext、qbittorrent、vlc... 显然,我尝试重新安装这些应用程序。它没有帮助我。

我已经看过一些关于此类错误的问题和教程,但其中大多数建议检查 /path/to/qt/plugins/platforms/ 中的库 libqxcb.so 并检查它是否遗漏任何依赖项。恢复依赖对每个人都有帮助。但不是我。以下是依赖项列表:

:/usr/lib/x86_64-linux-gnu/qt5/plugins/platforms$ ldd libqxcb.so 
    linux-vdso.so.1 =>  (0x00007ffeb5fc4000)
    libQt5XcbQpa.so.5 => /usr/lib/x86_64-linux-gnu/libQt5XcbQpa.so.5 (0x00007f9c2aa62000)
    libQt5Gui.so.5 => /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5 (0x00007f9c2a51a000)
    libQt5Core.so.5 => /usr/lib/x86_64-linux-gnu/libQt5Core.so.5 (0x00007f9c2a043000)
    libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f9c29cc1000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f9c298f8000)
    libX11-xcb.so.1 => /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1 (0x00007f9c296f5000)
    libXi.so.6 => /usr/lib/x86_64-linux-gnu/libXi.so.6 (0x00007f9c294e5000)
    libxcb-render-util.so.0 => /usr/lib/x86_64-linux-gnu/libxcb-render-util.so.0 (0x00007f9c292e1000)
    libSM.so.6 => /usr/lib/x86_64-linux-gnu/libSM.so.6 (0x00007f9c290d8000)
    libICE.so.6 => /usr/lib/x86_64-linux-gnu/libICE.so.6 (0x00007f9c28ebe000)
    libxcb-render.so.0 => /usr/lib/x86_64-linux-gnu/libxcb-render.so.0 (0x00007f9c28cb4000)
    libxcb.so.1 => /usr/lib/x86_64-linux-gnu/libxcb.so.1 (0x00007f9c28a91000)
    libxcb-image.so.0 => /usr/lib/x86_64-linux-gnu/libxcb-image.so.0 (0x00007f9c2888c000)
    libxcb-icccm.so.4 => /usr/lib/x86_64-linux-gnu/libxcb-icccm.so.4 (0x00007f9c28687000)
    libxcb-sync.so.1 => /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1 (0x00007f9c2847f000)
    libxcb-xfixes.so.0 => /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0 (0x00007f9c28277000)
    libxcb-shm.so.0 => /usr/lib/x86_64-linux-gnu/libxcb-shm.so.0 (0x00007f9c28073000)
    libxcb-randr.so.0 => /usr/lib/x86_64-linux-gnu/libxcb-randr.so.0 (0x00007f9c27e64000)
    libxcb-shape.so.0 => /usr/lib/x86_64-linux-gnu/libxcb-shape.so.0 (0x00007f9c27c60000)
    libxcb-keysyms.so.1 => /usr/lib/x86_64-linux-gnu/libxcb-keysyms.so.1 (0x00007f9c27a5d000)
    libxcb-xkb.so.1 => /usr/lib/x86_64-linux-gnu/libxcb-xkb.so.1 (0x00007f9c27841000)
    libxkbcommon-x11.so.0 => /usr/lib/x86_64-linux-gnu/libxkbcommon-x11.so.0 (0x00007f9c27639000)
    libfontconfig.so.1 => /usr/lib/x86_64-linux-gnu/libfontconfig.so.1 (0x00007f9c273f6000)
    libfreetype.so.6 => /usr/lib/x86_64-linux-gnu/libfreetype.so.6 (0x00007f9c2714b000)
    libglib-2.0.so.0 => /lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007f9c26e3a000)
    libX11.so.6 => /usr/lib/x86_64-linux-gnu/libX11.so.6 (0x00007f9c26b00000)
    libxkbcommon.so.0 => /usr/lib/x86_64-linux-gnu/libxkbcommon.so.0 (0x00007f9c268c0000)
    libQt5DBus.so.5 => /usr/lib/x86_64-linux-gnu/libQt5DBus.so.5 (0x00007f9c26842000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f9c26625000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f9c2631b000)
    libpng12.so.0 => /lib/x86_64-linux-gnu/libpng12.so.0 (0x00007f9c260f6000)
    libharfbuzz.so.0 => /usr/lib/x86_64-linux-gnu/libharfbuzz.so.0 (0x00007f9c25e97000)
    libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f9c25c7d000)
    libGL.so.1 => /usr/lib/nvidia-375/libGL.so.1 (0x00007f9c259d9000)
    libicui18n.so.55 => /usr/lib/x86_64-linux-gnu/libicui18n.so.55 (0x00007f9c25576000)
    libicuuc.so.55 => /usr/lib/x86_64-linux-gnu/libicuuc.so.55 (0x00007f9c251e2000)
    libpcre16.so.3 => /usr/lib/x86_64-linux-gnu/libpcre16.so.3 (0x00007f9c24f7c000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f9c24d77000)
    librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f9c24b6f000)
    libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f9c24959000)
    /lib64/ld-linux-x86-64.so.2 (0x000055a753a16000)
    libXext.so.6 => /usr/lib/x86_64-linux-gnu/libXext.so.6 (0x00007f9c24746000)
    libuuid.so.1 => /lib/x86_64-linux-gnu/libuuid.so.1 (0x00007f9c24541000)
    libXau.so.6 => /usr/lib/x86_64-linux-gnu/libXau.so.6 (0x00007f9c2433c000)
    libXdmcp.so.6 => /usr/lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007f9c24136000)
    libxcb-util.so.1 => /usr/lib/x86_64-linux-gnu/libxcb-util.so.1 (0x00007f9c23f30000)
    libexpat.so.1 => /lib/x86_64-linux-gnu/libexpat.so.1 (0x00007f9c23d06000)
    libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f9c23a96000)
    libdbus-1.so.3 => /lib/x86_64-linux-gnu/libdbus-1.so.3 (0x00007f9c23849000)
    libgraphite2.so.3 => /usr/lib/x86_64-linux-gnu/libgraphite2.so.3 (0x00007f9c23624000)
    libGLX.so.0 => /usr/lib/nvidia-375/libGLX.so.0 (0x00007f9c233f3000)
    libGLdispatch.so.0 => /usr/lib/nvidia-375/libGLdispatch.so.0 (0x00007f9c23125000)
    libicudata.so.55 => /usr/lib/x86_64-linux-gnu/libicudata.so.55 (0x00007f9c2166e000)
    libsystemd.so.0 => /lib/x86_64-linux-gnu/libsystemd.so.0 (0x00007f9c215e8000)
    libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x00007f9c213c6000)
    liblzma.so.5 => /lib/x86_64-linux-gnu/liblzma.so.5 (0x00007f9c211a3000)
    libgcrypt.so.20 => /lib/x86_64-linux-gnu/libgcrypt.so.20 (0x00007f9c20ec2000)
    libgpg-error.so.0 => /lib/x86_64-linux-gnu/libgpg-error.so.0 (0x00007f9c20cae000)

然后也有人建议重新安装软件包 libQt5Gui5,我也这样做了,但也没有帮助。

最后,我发现 libqxcb.so(位于 /path/to/qt/plugins/platforms/ 中)使用自己的路径,并且库 libQt5DBus.so.5 和 libQt5XcbQpa.so.5 应该位于同一个目录。尽管所有依赖项似乎都令人满意,但我还是决定尝试一下。又没有运气了。

如果有人知道还有什么问题以及如何解决这种情况,请分享[想法]。我将非常感谢任何帮助。

非常感谢您。

最好的问候。

【问题讨论】:

  • 令人惊讶的是,在我尝试删除并重新安装所有 libqt5 包以及 xcb 的所有库和 Qt5 依赖的几个额外库之后,我遇到了这个thread,它非常简单优雅解决方案。它工作得非常好。无论如何,我要感谢所有为这个问题做出贡献的人,因为它帮助我理解了在这种情况下我应该做什么和(更重要的是)不要做什么。

标签: linux qt ubuntu qt5.5


【解决方案1】:

“如何解决这种情况”回滚到你开始弄乱之前拍摄的 LVM 快照?

我想如果你不得不问,你没有利用 LVM,所以现在你会知道它不是为了麻烦,而是为了防止重大损坏。

  1. 确保您的文件系统位于 LVM 卷上,并且还有空间用于快照。大多数发行版都希望已经为您设置了 LVM,因此如果您没有剩余空间,您将不得不缩小文件系统以释放一些空间。否则,您必须将磁盘转换为 LVM。使用 systemrescuecd 或任何其他优秀的实时发行版来执行此操作。

  2. 拍摄快照。

  3. 强制删除系统 Qt 包(全部)。

  4. 强制重装系统Qt包。

  5. 验证系统 Qt 应用程序现在可以工作。

  6. 拍摄快照。

  7. 在您的主文件夹中重新安装 Qt。

  8. 确保一切正常,您可以使用新的 Qt。

  9. 如果您愿意,可以删除快照。

【讨论】:

    【解决方案2】:

    确实,你学到了宝贵的一课 - never manually replace Linux system libraries :-)

    首先,你应该做的是在你的主目录中安装 Qt 库,并添加一个新的 Qt 工具包到 QtCreator 链接到它。 (这里是关于如何将自定义 Qt 工具包添加到 QtCreator 的更多信息:Qt version in centos7

    现在,我将尝试解决这个问题:

    1. 获取属于 Qt5 包的文件列表,并将其保存到文件中:$ dpkg -l qt5-5-1 > qt5_file_list.txt(应将qt5-5-1 替换为包的确切名称)
    2. 完全删除任何系统 Qt5 库
    3. 确保没有留下任何 Qt5 文件(尤其是您手动创建的符号链接)
    4. 应用所有最新的 Ubuntu 更新(如果有)
    5. 重新安装官方Qt5库包
    6. 重启

    如果这有帮助,请告诉我!

    如果没有,您必须检查 Qt5 的依赖项并重新安装它们。为此:$ apt-cache depends [name of qt5 package] 并重新安装它们:$ apt-get install --reinstall [package]

    D

    【讨论】:

    • 不幸的是,强行删除所有 Qt5 库,然后从头开始重新安装它们并没有帮助。我什至无法想象重新安装所有依赖项需要多长时间,因为它们有成千上万个......大约有 100 个 Qt5 包。
    • 我尝试重新安装 libqt5core5a 和 libqt5gui5 的依赖项(最后一个实际上包含 xcb 插件),但仍然出现相同的错误。还有其他一些东西,我错过了......任何额外的想法将不胜感激。
    • 好的,如果这仍然没有解决,我的建议是:不要再花时间去寻找解决方案了。备份您的数据(包括应用程序数据 ;-))和配置,重新安装 Ubuntu,完成重新安装所有内容后制作快照并从错误中吸取教训 :-)
    • 对不起,@Danyright。我在原始消息而不是此处留下了评论,因为它与替代解决方案而不是您的解决方案有关。可能没有你的解决方案,虽然那个是行不通的,我不知道。现在很难说,但现在看来一切都很好。
    • 好的,很高兴知道您已修复它。不要犹豫,为对您有帮助的答案投票,并将您的解决方案作为官方答案发布;-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多