apt: kesalahan relokasi: versi GLIBCXX_3.4.21 tidak didefinisikan dalam file libstdc ++. so.6 dengan referensi waktu tautan


63

Sejak mencoba meningkatkan ke 16,04 xenial, saya mengerti

$ 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

saat berlari apt. Tak perlu dikatakan ini membuat sulit untuk melakukan apa pun.

Ada petunjuk?


wow ... ini membuat saya sangat tidak percaya proses upgrade Ubuntu / Canonical. Setiap kali saya memiliki kerja tapi versi basi, seseorang di forum bantuan memberitahu saya upgrade akan memecahkan semua masalah saya ... saya tidak tahu apa yang "scratch disk" adalah, dan tentu saja tidak mau harus mengganggu pekerjaan dengan GRUBdebugging …
isomorfisma

Jawaban:


55

Saya memiliki masalah yang sama yang disebabkan oleh masalah dari PPA untuk Ubuntu toolchain. Komputer saya tidak mau boot karena itu. Berikut komentar @ w00kie pada jawabannya, saya download (dari terminal tty) debian paket libstdc++6untuk Xenialdi link https://packages.ubuntu.com/xenial/libstdc++6 dan diinstal dengan menggunakan dpkg -i. Komputer berfungsi dengan baik sekarang.

Langkah

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

5
Bisakah Anda memberikan perintah, langkah demi langkah dalam jawaban Anda? Saya tidak akrab dengan ini sama sekali dan mesin linux saya dibongkar ...
Zachary Fields

@ Zakary Apa masalah sebenarnya yang Anda hadapi? Apakah Anda bisa boot?
Sagar Jha

1
Tidak juga. Jika saya membiarkan layar berkedip selama sekitar 15 menit, maka saya mendapatkan terminal tty2 dengan warna abu-abu yang sangat terang. Saya tidak dapat menggunakan apt(atau alat apa pun juga). Saya bahkan sudah mencoba mengunduh libstdc++6...debdari USB drive bootable, secara manual menempatkan paket, reboot ke sistem yang rusak dan menginstal .debmenggunakan sudo dpkg -i libstdc++6...deb, tetapi bahkan tidak tahu apa dpkgitu.
Zachary Fields

13
Untuk mengunduh / menginstal file .deb, Anda dapat melakukan: wget http://security.ubuntu.com/ubuntu/pool/main/g/gcc-5/libstdc++6_5.4.0-6ubuntu1~16.04.2_amd64.debdan kemudian setelah itu mengunduh, dpkg -i libstdc++6_5.4.0-6ubuntu1~16.04.2_amd64.deb(mengasumsikan sistem 64-bit). Bagi saya, koneksi internet saya tidak berfungsi, jadi saya mengunduhnya ke drive USB dari komputer yang berbeda, kemudian harus memasang drive USB secara manual di komputer saya yang bermasalah (di sudo mount /dev/sdc1 /media/usbmana sdc1ditemukan dengan menonton keluaran terminal segera setelah mencolokkan USB) dan kemudian jalankan dpkgperintah di atas .
Garrett

7
Saya harus menggunakannya dpkg --force-all -i libstdc+‌​+6_5.4.0-6ubuntu1~16‌​.04.2_amd64.debuntuk menginstalnya
virtualxtc

26

Pelakunya adalah sisa dari PPA untuk Ubuntu Upload Toolchain (dibatasi) , khususnya

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

Ada dua kemungkinan untuk berurusan dengan ini:

  • Anda sudah ppa-purgemenginstal. Kemudian

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

    memperbaiki masalah.

  • Ganti libstc ++ dengan mengunduh libstdc ++ 6 untuk Xenial dan instal via dpkg -i.


4
Setidaknya bagi saya, ini gagal dengan pesan yang identik dengan yang ada di pertanyaan ...
mbdevpl

1
Seharusnya diperluas dengan jawaban dari bawah, karena jelas ppa-purgetidak akan berfungsi (python yang sama)
user64204

1
Saya mendapatkan:sudo: ppa-purge: command not found
Garrett

@Garrettsudo apt install ppa-purge
Nico Schlömer

3
@ NicoSchlömer, terima kasih, tetapi sebenarnya, saya percaya saya aptjuga tidak berfungsi (sesuai dengan posting asli).
Garrett

8

Comp saya gagal boot dengan benar karena kesalahan ini. Apt-get tidak bekerja, begitu juga Gnome. Ini segera setelah upgrade dari 14,04 menjadi 16,04. Saya memecahkannya dengan memasukkan

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

Pada titik ini apt-getmulai bekerja lagi dan saya dapat memperbaiki semua masalah dari sana:

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

Saya juga harus menghapus Virtualbox (setelah perintah pembaruan) dan menginstalnya kembali nanti, tapi saya pikir ini tidak terkait.


2
saya mencoba ini tetapi mendapat kesalahan impor pada paket apt_pkg
Mixone

Mixone, apa kesalahan tepatnya dan pada perintah mana tepatnya?
Matjaz

sudo apt-get update kesalahan berasal dari python backend saya kira, stacktrace adalah python dan pada dasarnya dikatakan tidak dapat menemukan modul apt_pkg
Mixone

5
Masalah yang sama bagi saya juga, mencoba menggunakan apt-add-repositoryperintah dalam jawaban Anda memberi:ImportError: /usr/lib/x86_64-linux-gnu/libapt-pkg.so.5.0: symbol _ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE7compareERKS4_, version GLIBCXX_3.4.21 not defined in the file libstdc++.so.6 with link time reference
Garrett

Untuk orang idiot seperti saya mencoba meningkatkan versi 2 tahun setelah rilis dan berpikir semua bug sudah diperbaiki. Tautan dalam komentar di atas rusak. Ini yang baru. http://security.ubuntu.com/ubuntu/pool/main/g/gcc-5/libstdc++6_5.4.0-6ubuntu1~16.04.10_amd64.deb(atau i386atau keduanya) Dan jangan pedulikan dpkg mengutuk Anda. Lakukan --auto--deconfiguredan Anda apt-getakan kembali ke jalur setelahnya meskipun ada pesan kesalahan. Dan Anda akan dapat selesai dengan -f --install+ yang benar --upgradedan reboot ke sistem yang baru.
Ufos

4

Saya telah berpikir masalahnya adalah sesuatu yang unik bagi saya, dan disebabkan oleh kesalahan unduhan.

Diskusi ini memberi saya petunjuk yang saya butuhkan. Pada dasarnya, semua yang diperlukan adalah mengganti libstdc ++ .so.6.0.22 dengan libstdc ++ .s.0.0.21 di / usr / lib / x86_64-linux-gnu dari sistem yang gagal. (Sepertinya ada kesalahan dalam versi yang lebih baru.)

Ini dapat dilakukan dari thumb-drive atau, seperti dalam kasus saya, dari disk awal.

Detail lengkapnya di: https://answers.launchpad.net/ubuntu/+question/395832

Terimakasih untuk semua...


Saya menggunakan trik ini, tetapi melakukan dual boot pada beberapa ruang cadangan. Saya dapat dengan mudah me-mount partisi asli. Itu sangat mudah.
Andrew

Luar biasa - 3 perintah ini bekerja untuk saya: cd / usr / lib / x86_64-linux-gnu / >>> sudo rm libstdc ++. Jadi >> 6 >>> sudo ln -s libstdc ++ .so.6.0.21 libstdc ++ .so.6
osman

3

Mengikuti dpkg -ipendekatan dalam jawaban yang diterima, peningkatan saya 14,04-> 16,04 tidak hanya membutuhkan satu tetapi dua paket:

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

Setelah ini, apt upgradedapat mengunduh paket yang tersisa dan menyelesaikan instalasi.


2

Jika Anda memiliki versi terbaru dari snap 'sulap' yang diinstal dengan Snappy di Yakkety, apt Anda akan rusak dengan kesalahan yang sangat mirip:

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

karena bug ini:

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

Saat ini satu-satunya solusi yang saya tahu adalah menghapus snap conjure-up (atau mungkin 'snap revert' ke versi sebelumnya jika Anda telah menginstal sebelumnya).


1

Perbaikan yang berhasil bagi saya adalah benar-benar menambahkan ppa toolchain Ubuntu kembali:

sudo apt-add-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get install -f
sudo apt-get upgrade

0

Anda harus dapat memperbaikinya dengan mengetik:

sudo apt-get -f install

tanpa menentukan paket apa pun. Itu harus melakukan pekerjaan.


0

Mungkin ada masalah yang sangat mirip dengan sistem i386.

Untuk mengatasi masalah ini, saya juga harus menurunkan versi gcc-5-base dari Versi 5.4.1-2ubuntu1~12.04ke 5.4.0-6ubuntu1~16.04.4.

Untuk menyelesaikan upgrade ke sistem yang tampak masuk akal, saya juga harus menggunakan dpkg --purge on vituoso_nepomukdan virtualbox untuk menyingkirkan file konfigurasi mereka, yang menyebabkan masalah (bagi saya, VirtualBox disediakan oleh paket virtualbox-5.1, yang tampaknya tanpa cedera oleh upgrade. )

Kuncinya adalah mulai dpkg --configure dbusbekerja.

Untuk mengaktifkan wget saat berada di layar tipe tty, pengguna mungkin juga perlu menjalankan sudo dhclient eth0untuk mengaktifkan koneksi ethernet kabel.


0

Saya baru saja mengalami masalah ini ketika memutakhirkan distribusi ubuntu di linux saya melihat bahwa:

# 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.20

Tetapi ada dua file: libstdc ++ .so.6.0.21 dan libstdc ++. So.6.0.20

Saya telah mengubah tautan simbolis untuk menunjuk ke libstdc versi terbaru ++. Jadi 6.0.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

Menghasilkan:

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

dan semuanya kembali normal


0
  1. Unduh libstdc ++ 6 untuk ubuntu Anda dari situs web pengelola paket Ubuntu. (gunakan uname -auntuk menemukan arsitektur h / w dan s / w).

  2. Lari

    sudo dpkg --install --auto-deconfigure libstdc++6...deb
    
  3. Mulai ulang. Ubuntu harus boot tetapi apt tidak akan menginstal paket baru.

  4. Untuk memperbaiki dependensi dan memperbarui sistem, jalankan perintah ini

    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  
    
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.