apt : 재배치 오류 : 링크 시간 참조가있는 libstdc ++. so.6 파일에 버전 GLIBCXX_3.4.21이 정의되지 않았습니다.


63

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. 말할 것도없이 어떤 일도하기 어렵다.

힌트가 있습니까?


와우… 이것은 Ubuntu / Canonical의 업그레이드 과정을 정말로 불신하게 만듭니다. 작동 하지만 오래된 버전 이있을 때마다 도움말 포럼의 누군가가 업그레이드로 모든 문제를 해결할 수 있다고 말합니다. "스크래치 디스크"가 무엇인지 모르고 GRUB디버깅 작업을 중단하고 싶지는 않습니다. …
동 형사상

답변:


55

우분투 툴체인에 대한 PPA의 문제로 인해 동일한 문제가 발생했습니다. 컴퓨터가 부팅되지 않았습니다. 그의 대답에 @를 w00kie의 의견에 따라, 나는 (TTY 터미널에서) 다운로드 패키지의 데비안 libstdc++6에 대한 Xenial링크에서 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

5
답을 단계별로 명령을 넣을 수 있습니까? 나는 이것에 전혀 익숙하지 않고 내 리눅스 머신이 엉망이다 ...
Zachary Fields

@Zachary 직면하고있는 정확한 문제는 무엇입니까? 부팅 할 수 있습니까?
Sagar Jha

1
실제로는 아닙니다. 화면을 약 15 분 동안 깜박이게하면 매우 밝은 회색으로 tty2 터미널 프롬프트가 나타납니다. 사용할 수 없습니다 apt(또는 실제로 도구가 없습니다 ). 심지어 libstdc++6...deb부팅 가능한 USB 드라이브에서 다운로드 를 시도하고 수동으로 패키지를 배치하고 손상된 시스템으로 재부팅하고 .debusing을 설치 sudo dpkg -i libstdc++6...deb하려고했지만 심지어 무엇인지 알지 못합니다 dpkg.
Zachary Fields

13
.deb 파일을 다운로드 / 설치하려면 wget http://security.ubuntu.com/ubuntu/pool/main/g/gcc-5/libstdc++6_5.4.0-6ubuntu1~16.04.2_amd64.deb다음 작업을 수행 한 다음 다운로드가 완료되면 dpkg -i libstdc++6_5.4.0-6ubuntu1~16.04.2_amd64.deb(64 비트 시스템으로 가정) 수행 할 수 있습니다 . 나를 위해, 내 인터넷 연결 후 수동으로 문제가있는 컴퓨터에 USB 드라이브를 탑재했다, 그래서 다른 컴퓨터에서 USB 드라이브에 그것을 다운로드, 작동하지 않는 ( sudo mount /dev/sdc1 /media/usb여기서 sdc1바로 USB에 연결 한 후 터미널 출력을 보면서 발견) 그런 다음 위 dpkg명령 을 실행하십시오 .
개렛

7
dpkg --force-all -i libstdc+‌​+6_5.4.0-6ubuntu1~16‌​.04.2_amd64.deb그것을 설치하기 위해 사용해야 했다
virtualxtc

26

범인은 PPA에서 우분투 툴체인 업로드 (제한됨)를 위해 남은 것입니다.

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

이를 처리 할 수있는 두 가지 가능성이 있습니다.

  • 이미 ppa-purge설치했습니다. 그때

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

    문제를 해결합니다.

  • Xenial 용 libstdc ++ 6를 다운로드 하고를 통해 설치 하여 libstc ++를 무시하십시오 dpkg -i.


4
적어도 나를 위해, 이것은 질문의 메시지와 동일한 메시지와 함께 실패합니다 ...
mbdevpl

1
분명히 ppa-purge작동하지 않기 때문에 아래의 답변으로 확장해야 합니다 (같은 파이썬)
user64204

1
내가 얻을 :sudo: ppa-purge: command not found
개럿

@Garrettsudo apt install ppa-purge
Nico Schlömer

3
@ NicoSchlömer, 감사합니다.하지만 실제로 apt는 원래 게시물에 따라 작동하지 않는다고 생각 합니다.
개럿

8

이 오류로 인해 comp가 제대로 부팅되지 않았습니다. 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를 제거하고 나중에 다시 설치해야했지만 관련이 없다고 생각합니다.


2
나는 이것을 시도했지만 패키지 apt_pkg에서 가져 오기 오류가 발생했습니다
Mixone

Mixone, 정확한 오류는 무엇이며 어떤 명령을 정확히 수행 했습니까?
Matjaz

sudo는 오류가 난 것 같아요 파이썬 백엔드에서 온 업데이트 apt-get을, 스택 트레이스는 파이썬이었고, 그것은 기본적으로 모듈 apt_pkg를 찾을 수 없다고
Mixone

5
apt-add-repository답에 명령 을 사용하려고하면 나에게도 같은 문제가 있습니다 .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

출시 후 2 년 후에 업그레이드를 시도하고 모든 버그가 수정되었다고 생각하는 바보 같은 사람들에게. 위의 주석에서 링크가 끊어졌습니다. 여기 새로운 것이 있습니다. http://security.ubuntu.com/ubuntu/pool/main/g/gcc-5/libstdc++6_5.4.0-6ubuntu1~16.04.10_amd64.deb(또는 i386둘 다) 그리고 dpkg는 당신을 저주하지 않습니다. 수행 --auto--deconfigure하여 apt-get오류 메시지에도 불구하고 이후 다시 궤도에있을 것입니다. 그리고 당신은 적절한 -f --install+ 로 끝내고 --upgrade새로운 시스템으로 재부팅 할 수 있습니다.
Ufos

4

문제가 저에게 고유 한 것으로 생각되어 다운로드 오류로 인해 발생했습니다.

이 토론은 내가 필요한 단서를 주었다. 기본적으로 필요한 것은 실패한 시스템의 / usr / lib / x86_64-linux-gnu에서 libstdc ++. so.6.0.22를 libstdc ++. so.6.0.21로 바꾸는 것입니다. (최신 버전에는 오류가있는 것 같습니다.)

이것은 엄지 드라이브 또는 필자의 경우 스크래치 디스크에서 수행 할 수 있습니다.

자세한 내용은 https://answers.launchpad.net/ubuntu/+question/395832 에서 확인하십시오.

모든 덕분에 ...


이 트릭을 사용했지만 여분의 공간에서 이중 부팅을 수행했습니다. 원래 파티션을 쉽게 마운트 할 수있었습니다. 꽤 쉬웠다.
Andrew

굉장-이 3 명령은 나를 위해 일했다 : cd / usr / lib / x86_64-linux-gnu / >>> sudo rm libstdc ++. so.6 >>> sudo ln -s libstdc ++. so.6.0.21 libstdc ++. so.6
osman

3

dpkg -i허용 된 답변 의 접근 방식에 따라 14.04-> 16.04 업그레이드에는 하나의 패키지가 아니라 두 개의 패키지가 필요했습니다.

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나머지 패키지를 다운로드하고 설치를 완료 할 수있었습니다.


2

Yakkety에 Snappy와 함께 최신 버전의 '접합'스냅을 설치 한 경우 유사한 오류로 인해 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 snap을 제거하는 것입니다 (또는 이전에 설치 한 경우 이전 버전으로 '스냅 되돌리기').


1

나를 위해 고침은 실제로 Ubuntu 툴체인 ppa를 다시 추가하는 것이 었습니다.

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

0

다음을 입력하여 문제를 해결할 수 있어야합니다.

sudo apt-get -f 설치

패키지를 지정하지 않고. 작업을 수행해야합니다.


0

i386 시스템과 매우 유사한 문제가있을 수 있습니다.

이 문제를 해결하기 위해 gcc-5-base를 Version에서로 다운 그레이드 5.4.1-2ubuntu1~12.04해야했습니다 5.4.0-6ubuntu1~16.04.4.

합리적인 시스템으로의 업그레이드를 완료하기 위해, 또한 dpkg --purge on vituoso_nepomukvirtualbox 를 사용 하여 구성 파일을 제거해야했고, 문제를 일으켰습니다. )

열쇠는 dpkg --configure dbus일하는 것이 었습니다 .

tty 유형 화면에서 wget을 활성화하려면 sudo dhclient eth0유선 이더넷 연결을 활성화 하기 위해 실행해야 할 수도 있습니다 .


0

리눅스에서 우분투 배포판을 업그레이드 할 때이 문제가 발생했습니다.

# 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

그러나 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
  1. Ubuntu 패키지 관리자 웹 사이트에서 우분투 용 libstdc ++ 6을 다운로드하십시오. ( uname -ah / w 및 s / w 아키텍처를 찾는 데 사용 ).

  2. 운영

    sudo dpkg --install --auto-deconfigure libstdc++6...deb
    
  3. 재부팅하십시오. 우분투는 부팅해야하지만 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  
    
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.