壊れた libstdc++6 を修正する方法 (apt も壊れる)

壊れた libstdc++6 を修正する方法 (apt も壊れる)

gcc以前、手動アップデートで何か間違えたようですが、今日 14.04 から 16.04 にアップグレードするまでは問題になりませんでした。つまり、システムはlibstdc++6バージョンが適切であると認識しているようですが、(他の多くのプログラムも) 適切ではないとapt文句を言っています (共有ライブラリのバージョンが実際は間違っているため)。

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

システムはグラフィカル モードも起動せず、上記の出力は非グラフィカル コンソール ( を使用Ctrl-Alt-F6) を使用して取得されたものであり、aptそれ自体はまったく使用できないため、再インストールなどの操作を行うことはできません。

パッケージを管理するために使用しているプログラム自体が影響を受けて使用できない場合、これらのパッケージを修正して再インストールするにはどうすればよいでしょうか?

答え1

最初は手動でコピーすることでグラフィカルログインシェルを取得できましたlibstdc++.so.6.0.21ライブ USB スティックからその場所にコピーし、 からそのリンクを作成しますlibstdc++.so.6。Ubuntu 16.04 のデフォルトであると思われるため、このバージョンを使用しました。また、エラー メッセージに記載されている「21」(「バージョン GLIBCXX_3.4.21」) も含まれています。

これはグラフィック スタックの要件を満たしているように見えましたが、libstdc++6 に依存する他のプログラムでは同じエラーが残りました。何度か試した後、次の手順を使用して手動でインストール (アンインストール) することaptで、問題全体を解決できました。dpkg

  • 16.04 の適切なバージョンの deb ファイルをダウンロードします。

    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
    
  • 正しい libstdc++6 のインストールをブロックしていたこの特定のバージョンを削除します。

    sudo dpkg --force-depends -r libstdc++6:i386
    
  • 次に、ファイルから「適切な」バージョンをインストールします。

    sudo dpkg -i libstdc++6_5.4.0-6ubuntu1~16.04.4_amd64.deb apt_1.2.10ubuntu1_amd64.deb
    
  • 最後に、更新と試行中に残した混乱を修正します。

    sudo apt-get install -f
    

関連情報