安装 Qt 5.8 后所有 qt 应用程序停止工作

After installing Qt 5.8 all qt applications stopped working

各位!

我有点小问题。我的 OS 是 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 应该位于同一目录中。尽管所有依赖项似乎都已满足,但我还是决定尝试一下。又没运气了。

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

非常感谢您。

此致。

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

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

现在,我将尝试通过以下方式解决问题:

  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

"how this situation can be resolved" 回滚到您开始弄乱之前拍摄的 LVM 快照?

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

  1. 确保您的文件系统位于 LVM 卷上,并且有 space 空间用于快照。大多数发行版都希望已经为您设置了 LVM,所以如果您没有 space,您将不得不缩小文件系统以释放一些 space。否则,您将不得不将磁盘转换为 LVM。使用 systemrescuecd 或任何其他好的实时发行版来做到这一点。

  2. 拍一张快照。

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

  4. 强行重装系统Qt包

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

  6. 拍一张快照。

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

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

  9. 如果需要,请删除快照。