升级后,我的系统只启动到终端模式,几乎没有任何功能,包括易于失败的原因如下:
apt: relocation error: /usr/lib/x86_64-linux-gnu/libapt-pkg.so.5.0: symbol _ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE7compareERKS4_, version GLIBCXX_3.4.21 not defined in file libstdc++.so.6 with link time reference
我仔细检查了一下,发现新的 libstdc++.so.6.0.22 显然没有链接到正确的东西,但 libstdc++.so.6.0.21 却链接到了。我找到了 libstdc++.so.6.0.21 的副本,并将 libstdc++.so.6 符号链接指向它,一切又恢复正常。系统启动到 GUI,程序运行,等等。
但是,Software Updater 中的某些更新失败了(包括 MySQL),通常当它们失败时,某些东西会将 libstdc++.so.6 指向回 0.22。发生这种情况时,我仍在运行的 Xwindow 会话中的几个程序拒绝运行,例如 Firefox 和 AisleRiot Solitare(在我弄清楚存在问题之前)。当我将符号链接指向回 0.21 时,一切都恢复正常。
我希望运行所有稳定更新,包括 libstdc++,但似乎我遗漏了某些内容,或者某些内容升级顺序错误,导致进程中断,因此库处于半升级状态。我如何才能从这里正确升级?
dpkg -S 'libstdc++.6.0.22'
dpkg-query: no path found matching pattern *libstdc++.6.0.22*
答案1
wget http://mirrors.kernel.org/ubuntu/pool/main/g/gcc-4.8/libstdc++6_4.8.4-2ubuntu1~14.04.4_amd64.deb
sudo dpkg -i --force-all libstdc++6_4.8.4-2ubuntu1~14.04.4_amd64.deb
sudo apt-get install -f
为我工作或从其他电脑复制 ibstdc++.so.6。