web-dev-qa-db-ja.com

apt:再配置エラー:バージョンGLIBCXX_3.4.21は、リンク時間参照を含むファイルlibstdc ++。so.6で定義されていません

16.04 xenialにアップグレードしようとして以来、私は

$ apt
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

単にaptを実行する場合。言うまでもなく、これにより何もすることが難しくなります。

ヒントはありますか?

63
Nico Schlömer

犯人は buntu Toolchain UploadsのPPA(制限付き) からの残り物です。

/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.22

これに対処する2つの可能性があります。

  • 既にppa-purgeがインストールされています。それから

    Sudo ppa-purge ppa:ubuntu-toolchain-r/test
    

    問題を修正します。

  • Xenialの場合はlibstdc ++ 6 をダウンロードし、dpkg -iを介してインストールすることにより、libstc ++をオーバーライドします。

25
Nico Schlömer

UbuntuツールチェーンのPPAの問題が原因で同じ問題が発生しました。そのためにコンピューターが起動しません。彼の回答に対する@ w00kieのコメントに続いて、リンク Xenialのパッケージlibstdc++6のdebianを(ttyターミナルから)ダウンロードしましたhttps://packages.ubuntu.com/xenial/libstdc ++ 6 およびdpkg -iを使用してインストール。これでコンピューターは正常に動作します。

手順

wget http://security.ubuntu.com/ubuntu/pool/main/g/gcc-5/libstdc++6_5.4.0-6ubuntu1~16.04.10_AMD64.deb
Sudo dpkg -i libstdc++6_5.4.0-6ubuntu1~16.04.10_AMD64.deb

# I also found this helpful
Sudo apt-get -f install
54
Sagar Jha

このエラーのため、コンプが正しく起動できませんでした。 Apt-getは動作しませんでした。Gnomeも動作しませんでした。これは、14.04から16.04にアップグレードした直後です。を入力してttyで解決しました

Sudo apt-add-repository --remove ppa:ubuntu-toolchain-r/test

この時点でapt-getが再び機能し始め、そこからすべての問題を修正することができました。

Sudo apt-get clean
Sudo apt-get update
Sudo apt-get install -f
Sudo dpkg -a --configure
Sudo apt-get dist-upgrade

また、(更新コマンドの後に)Virtualboxをアンインストールして、後で再インストールする必要がありましたが、これは無関係だったと思います。

8
Matjaz

私は問題が私に固有のものであり、ダウンロードエラーが原因であると考えていました。

この議論は私に必要な手がかりを与えてくれました。基本的に、必要なのは、障害のあるシステムの/ usr/lib/x86_64-linux-gnuにあるlibstdc ++。so.6.0.22をlibstdc ++。so.6.0.21に置き換えることだけでした。 (新しいバージョンにはエラーがあるようです。)

これは、サムドライブから、または私の場合のように、スクラッチディスクから実行できます。

完全な詳細: https://answers.launchpad.net/ubuntu/+question/395832

ありがとうございます...

4
SteelTrap

受け入れられた答えのdpkg -iアプローチに従って、私の14.04-> 16.04アップグレードには1つではなく2つのパッケージが必要でした。

gcc-5-base_5.4.0-6ubuntu1~16.04.4_i386.deb
libstdc++6_5.4.0-6ubuntu1~16.04.4_i386.deb

この後、apt upgradeは残りのパッケージをダウンロードし、インストールを完了することができました。

3
user1905416

YakketyのSnappyで「conjure-up」スナップの最新バージョンがインストールされている場合、非常によく似たエラーでaptが破損します。

apt: relocation error: /usr/lib/x86_64-linux-gnu/libapt-private.so.0.0: symbol _ZN13pkgSourceList16AddVolatileFilesER11CommandLinePSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS8_EE, version APTPKG_5.0 not defined in file libapt-pkg.so.5.0 with link time reference

このバグのため:

https://bugs.launchpad.net/snappy/+bug/1a677417

現在、私が知っている唯一の回避策は、conjure-upスナップを削除することです(以前にインストールされていた場合は、スナップを以前のバージョンに「スナップ復帰」することもできます)。

2
Ivy

私のために働いた修正は、実際にUbuntuツールチェーンppaを追加することでした:

Sudo apt-add-repository ppa:ubuntu-toolchain-r/test
Sudo apt-get update
Sudo apt-get install -f
Sudo apt-get upgrade
1
  1. UbuntuパッケージマネージャーのWebサイトからUbuntuのlibstdc ++ 6をダウンロードします。 (uname -aを使用してh/wおよびs/wアーキテクチャを見つけます)。

  2. 走る

    Sudo dpkg --install --auto-deconfigure libstdc++6...deb
    
  3. リブート。 Ubuntuは起動するはずですが、aptは新しいパッケージをインストールしません。

  4. 依存関係を修正してシステムを最新の状態にするには、次のコマンドを実行します

    Sudo apt-add-repository ppa:ubuntu-toolchain-r/test
    Sudo apt-get update
    Sudo apt-get install -f
    Sudo apt-get upgrade
    Sudo apt-get dist-upgrade
    Sudo apt-get autoclean && Sudo apt-get autoremove  
    
0
Vormos Zuke

次のように入力して修正できるはずです。

須藤apt-get -fインストール

パッケージを指定せずに。作業を行う必要があります。

0
biljkus

I386システムでも同様の問題が発生する可能性があります。

この問題を解決するには、gcc-5-baseをバージョン5.4.1-2ubuntu1~12.04から5.4.0-6ubuntu1~16.04.4にダウングレードする必要もありました。

合理的なシステムへのアップグレードを完了するには、dpkg --purge on vituoso_nepomukとvirtualboxを使用して構成ファイルを削除する必要がありました。これは問題の原因でした(私にとって、VirtualBoxはパッケージvirtualbox-5.1で提供されますアップグレードによって無傷。)

重要なのは、dpkg --configure dbusを機能させることでした。

Ttyタイプの画面でwgetを有効にするには、ユーザーがSudo dhclient eth0を実行して有線イーサネット接続を有効にする必要がある場合もあります。

0

LinuxでUbuntuディストリビューションをアップグレードするときにこの問題が発生しました。

# ls /usr/lib/x86_64-linux-gnu/libstdc++.so.6*
libstdc++.so.6 -> libstdc++.so.6cd*
libstdc++.so.6.0.20*
libstdc++.so.6.0.21
libstdc++.so.6cd -> libstdc++.so.6.0.20*

libstdc ++。so.6-> libstdc ++。so.6cd-> libstdc ++。so.6.0.2

しかし、2つのファイルがありました:libstdc ++。so.6.0.21およびlibstdc ++。so.6.0.20

最新バージョンのlibstdc ++。so.6.0.21を指すようにシンボリックリンクを変更しました

cd /usr/lib/x86_64-linux-gnu
rm libstdc++.so.6cd
chmod +x libstdc++.so.6.0.21
ln -s  libstdc++.so.6.0.21 libstdc++.so.6cd

結果:

libstdc++.so.6 -> libstdc++.so.6cd*
libstdc++.so.6.0.20*
libstdc++.so.6.0.21*
libstdc++.so.6cd -> libstdc++.so.6.0.21*

そしてすべてが正常に戻った

0
Fábio Ricci