So beheben Sie das defekte libstdc++6, das auch apt beschädigt

So beheben Sie das defekte libstdc++6, das auch apt beschädigt

Irgendwann in der Vergangenheit habe ich bei einem manuellen Update wohl etwas vermasselt gcc, was sich aber erst heute als Problem herausstellte, als ich von 14.04 auf 16.04 aktualisiert habe. Das System scheint nämlich zu denken, dass die libstdc++6Version in Ordnung ist, während apt(und viele andere Programme) sich beschweren, dass sie es nicht ist (weil die gemeinsam genutzte Bibliothek tatsächlich in der falschen Version vorliegt):

sudo apt-get install --fix-broken --fix-missing
apt-get: 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

Das System startet nicht einmal einen grafischen Modus, die obige Ausgabe wurde bei Verwendung einer nicht-grafischen Konsole (mit Ctrl-Alt-F6) erhalten und aptist selbst völlig unbrauchbar, sodass ich nicht einfach so etwas wie eine Neuinstallation durchführen kann.

Wie kann ich diese Pakete reparieren und neu installieren, wenn das Programm, das ich zu ihrer Verwaltung verwende, betroffen und unbrauchbar ist?

Antwort1

Zunächst gelang es mir, eine grafische Login-Shell zu erhalten, indem ichlibstdc++.so.6.0.21von einem Live-USB-Stick an seine Stelle und Erstellen eines Links dazu von libstdc++.so.6. Ich habe genau diese Version verwendet, da sie die Standardversion für Ubuntu 16.04 zu sein scheint und auch die in der Fehlermeldung erwähnte „21“ enthält („Version GLIBCXX_3.4.21“).

Während dies den Grafikstapel zufriedenzustellen schien, blieben die gleichen Fehler bei aptanderen Programmen bestehen, die von libstdc++6 abhängig waren. Nach einigem Probieren konnte ich das Ganze mit den folgenden Schritten lösen, indem ich dpkgDinge manuell (de-)installierte:

  • Laden Sie die Deb-Dateien in den richtigen Versionen für 16.04 herunter:

    wget http://mirrors.kernel.org/ubuntu/pool/main/a/apt/apt_1.2.10ubuntu1_amd64.deb http://mirrors.kernel.org/ubuntu/pool/main/g/gcc-5/libstdc++6_5.4.0-6ubuntu1~16.04.4_amd64.deb
    
  • Entfernen dieser bestimmten Version, die die Installation der richtigen libstdc++6 blockierte:

    sudo dpkg --force-depends -r libstdc++6:i386
    
  • Installieren Sie dann die „gute“ Version aus den Dateien:

    sudo dpkg -i libstdc++6_5.4.0-6ubuntu1~16.04.4_amd64.deb apt_1.2.10ubuntu1_amd64.deb
    
  • Und zum Schluss beseitigen Sie das Chaos, das ich beim Aktualisieren und Ausprobieren hinterlassen habe:

    sudo apt-get install -f
    

verwandte Informationen