apt: lỗi di dời: phiên bản GLIBCXX_3.4.21 không được xác định trong tệp libstdc ++. so.6 với tham chiếu thời gian liên kết


63

Kể từ khi cố gắng nâng cấp lên 16.04 xenial, tôi nhận được

$ 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

khi chỉ đơn giản là chạy apt. Không cần phải nói điều này làm cho nó khó khăn để làm bất cứ điều gì.

Có gợi ý nào không?


wow, điều này khiến tôi thực sự không tin vào quá trình nâng cấp của Ubuntu / Canonical. Mỗi khi tôi có một phiên bản hoạt động nhưng cũ kỹ, một người nào đó trong diễn đàn trợ giúp nói với tôi các bản nâng cấp sẽ giải quyết tất cả các vấn đề của tôi. Tôi không biết "đĩa cào" là gì và chắc chắn không muốn phải làm gián đoạn công việc GRUBgỡ lỗi Tiết
kiệm

Câu trả lời:


55

Tôi đã có cùng một vấn đề gây ra bởi các vấn đề từ PPA cho Ubuntu toolchain. Máy tính của tôi không khởi động được vì nó. Sau bình luận @ w00kie về câu trả lời của mình, tôi đã tải về (từ thiết bị đầu cuối tty) debian của gói libstdc++6cho Xenialtại liên kết https://packages.ubuntu.com/xenial/libstdc++6 và cài đặt sử dụng dpkg -i. Máy tính hoạt động tốt bây giờ.

Các bước

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
Bạn có thể vui lòng đặt các lệnh, từng bước trong câu trả lời của bạn? Tôi hoàn toàn không quen với điều này và máy linux của tôi bị cản trở ...
Zachary Field

@Zachary Vấn đề chính xác mà bạn gặp phải là gì? Bạn có thể khởi động?
Sagar Jha

1
Không hẳn vậy. Nếu tôi để màn hình nhấp nháy trong khoảng 15 phút, thì tôi nhận được lời nhắc thiết bị đầu cuối tty2 với màu xám rất nhạt. Tôi không thể sử dụng apt(hoặc bất kỳ công cụ thực sự). Tôi thậm chí đã cố tải xuống libstdc++6...debtừ ổ USB có thể khởi động, đặt gói thủ công, khởi động lại vào hệ thống bị hỏng và cài đặt .debsử dụng sudo dpkg -i libstdc++6...deb, nhưng thậm chí còn không biết nó dpkglà gì .
Zachary Field

13
Để tải xuống / cài đặt tệp .deb, bạn có thể thực hiện: wget http://security.ubuntu.com/ubuntu/pool/main/g/gcc-5/libstdc++6_5.4.0-6ubuntu1~16.04.2_amd64.debvà sau đó tải xuống, dpkg -i libstdc++6_5.4.0-6ubuntu1~16.04.2_amd64.deb(giả sử hệ thống 64 bit). Đối với tôi, kết nối internet của tôi không hoạt động, vì vậy tôi đã tải nó xuống ổ USB từ một máy tính khác, sau đó phải tự gắn ổ USB vào máy tính có vấn đề của tôi ( sudo mount /dev/sdc1 /media/usbnơi sdc1được tìm thấy bằng cách xem đầu ra thiết bị đầu cuối ngay sau khi cắm USB) và sau đó chạy dpkglệnh trên .
Garrett

7
Tôi đã phải sử dụng dpkg --force-all -i libstdc+‌​+6_5.4.0-6ubuntu1~16‌​.04.2_amd64.debđể cài đặt nó
virtualxtc

26

Thủ phạm là phần còn lại từ PPA cho Ubuntu Toolchain Uploads (bị hạn chế) , cụ thể

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

Có hai khả năng đối phó với điều này:

  • Bạn đã ppa-purgecài đặt. Sau đó

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

    khắc phục các sự cố.

  • Ghi đè libstc ++ bằng cách tải xuống libstdc ++ 6 cho Xenial và cài đặt qua dpkg -i.


4
Ít nhất là đối với tôi, điều này thất bại với tin nhắn giống hệt với tin nhắn trong câu hỏi ...
mbdevpl

1
Có lẽ nên được mở rộng với các câu trả lời từ bên dưới, vì rõ ràng ppa-purgesẽ không hoạt động (cùng một con trăn)
user64204

1
Tôi nhận được:sudo: ppa-purge: command not found
Garrett

@Garrettsudo apt install ppa-purge
Nico Schlömer

3
@ NicoSchlömer, cảm ơn, nhưng thực sự, tôi tin rằng tôi aptcũng không hoạt động (theo bài viết gốc).
Garrett

8

Comp của tôi không khởi động đúng vì lỗi này. Apt-get không hoạt động, Gnome cũng không hoạt động. Đây là ngay lập tức sau khi nâng cấp từ 14.04 đến 16.04. Tôi đã giải quyết nó trong tty bằng cách nhập

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

Tại thời điểm này apt-getbắt đầu hoạt động trở lại và tôi đã có thể khắc phục tất cả các vấn đề từ đó:

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

Tôi cũng đã phải gỡ cài đặt Virtualbox (sau lệnh cập nhật) và khôi phục lại sau, nhưng tôi nghĩ điều này không liên quan.


2
tôi đã thử điều này nhưng gặp lỗi nhập trên gói apt_pkg
Mixone

Mixone, lỗi chính xác là gì và chính xác lệnh nào?
Matjaz

sudo apt-get update lỗi xuất phát từ phần phụ trợ python tôi đoán, stacktrace là python và về cơ bản nó không thể tìm thấy mô-đun apt_pkg
Mixone

5
Vấn đề tương tự đối với tôi cũng vậy, cố gắng sử dụng apt-add-repositorylệnh trong câu trả lời của bạn sẽ cho: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

Đối với những kẻ ngốc như tôi đang cố gắng nâng cấp 2 năm sau khi phát hành và nghĩ rằng tất cả các lỗi đã được sửa. Liên kết trong các bình luận ở trên bị hỏng. Đây là cái mới. http://security.ubuntu.com/ubuntu/pool/main/g/gcc-5/libstdc++6_5.4.0-6ubuntu1~16.04.10_amd64.deb(hoặc i386hoặc cả hai) Và đừng bận tâm dpkg chửi bạn. Làm --auto--deconfigurevà bạn apt-getsẽ trở lại đúng hướng sau đó mặc dù có thông báo lỗi. Và bạn sẽ có thể hoàn thành với -f --install+ thích hợp --upgradevà khởi động lại vào một hệ thống mới.
Ufos

4

Tôi đã nghĩ rằng vấn đề là một cái gì đó độc đáo đối với tôi và là do lỗi tải xuống.

Cuộc thảo luận này đã cho tôi manh mối tôi cần. Về cơ bản, tất cả những gì cần thiết là thay thế libstdc ++. So.6.0.22 bằng libstdc ++. So.6.0.21 in / usr / lib / x86_64-linux-gnu của hệ thống bị lỗi. (Có vẻ như có lỗi trong phiên bản mới hơn.)

Điều này có thể được thực hiện từ một ổ đĩa ngón tay hoặc, như trong trường hợp của tôi, từ một đĩa cào.

Chi tiết đầy đủ tại: https://answers.launchpad.net/ubfox/+question/395832

Cảm ơn tất cả...


Tôi đã sử dụng thủ thuật này, nhưng đã khởi động kép trên một số không gian trống. Tôi đã có thể dễ dàng gắn kết phân vùng ban đầu. Nó khá dễ.
Andrew

Tuyệt vời - 3 lệnh này hoạt động với tôi: cd / usr / lib / x86_64-linux-gnu / >>> sudo rm libstdc ++. So.6 >>> sudo ln -s libstdc ++. So.6.0.21 libstdc ++.
osman

3

Theo dpkg -icách tiếp cận trong câu trả lời được chấp nhận, bản nâng cấp 14.04-> 16.04 của tôi không chỉ cần một mà là hai gói:

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

Sau này, apt upgradeđã có thể tải xuống các gói còn lại và hoàn tất cài đặt.


2

Nếu bạn có phiên bản mới nhất của snap 'kết hợp' được cài đặt với Snappy trên Yakkety, apt của bạn sẽ bị hỏng với một lỗi rất giống nhau:

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

do lỗi này:

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

Hiện tại cách giải quyết duy nhất mà tôi biết là loại bỏ snap-up snap (hoặc có thể là 'snap hoàn nguyên' nó về phiên bản trước nếu bạn đã cài đặt trước đó).


1

Cách khắc phục hiệu quả với tôi là thực sự thêm ppa công cụ Ubuntu lại:

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

0

Bạn có thể sửa nó bằng cách gõ:

cài đặt sudo apt-get -f

mà không chỉ định bất kỳ gói. Nó nên làm việc.


0

Có thể có một vấn đề rất giống với các hệ thống i386.

Để giải quyết vấn đề, tôi cũng phải hạ cấp gcc-5-base từ Phiên bản 5.4.1-2ubuntu1~12.04xuống 5.4.0-6ubuntu1~16.04.4.

Để hoàn thành nâng cấp lên một hệ thống có vẻ hợp lý, tôi cũng phải sử dụng dpkg --purge on vituoso_nepomukvà hộp ảo để loại bỏ các tệp cấu hình của chúng, điều này gây ra sự cố (đối với tôi, VirtualBox được cung cấp bởi gói virtualbox-5.1, có vẻ như không được nâng cấp. )

Chìa khóa là để đi dpkg --configure dbuslàm.

Để bật wget trong khi ở màn hình loại tty, người dùng cũng có thể cần phải thực thi sudo dhclient eth0để kích hoạt kết nối ethernet có dây.


0

Tôi vừa gặp vấn đề này khi nâng cấp phân phối Ubuntu trên linux Tôi thấy rằng:

# 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

Nhưng có hai tệp: libstdc ++. So.6.0.21 và libstdc ++. So.6.0.20

Tôi đã thay đổi liên kết tượng trưng để trỏ đến phiên bản mới nhất 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

Kết quả:

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

và mọi thứ trở lại bình thường


0
  1. Tải xuống libstdc ++ 6 cho Ubuntu của bạn từ trang web của trình quản lý gói Ubuntu. (sử dụng uname -ađể tìm kiến ​​trúc h / w và s / w).

  2. Chạy

    sudo dpkg --install --auto-deconfigure libstdc++6...deb
    
  3. Khởi động lại. Ubuntu nên khởi động nhưng apt sẽ không cài đặt các gói mới.

  4. Để sửa lỗi phụ thuộc và cập nhật hệ thống, hãy chạy các lệnh này

    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  
    
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.