apt: ข้อผิดพลาดในการย้ายตำแหน่ง: รุ่น GLIBCXX_3.4.21 ไม่ได้กำหนดไว้ในไฟล์ libstdc ++. so.6 พร้อมการอ้างอิงเวลาลิงก์


63

ตั้งแต่พยายามอัพเกรดเป็น xenial ที่ 16.04 ฉันได้รับ

$ 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 จริงๆ ทุกครั้งที่ฉันมีรุ่นที่ทำงานอยู่แต่เก่า ๆ ใครบางคนในฟอรัมความช่วยเหลือบอกฉันว่าการอัปเกรดจะแก้ปัญหาทั้งหมดของฉัน ... ฉันไม่รู้ว่า "scratch disk" คืออะไรและแน่นอนไม่ต้องการขัดจังหวะการทำงานด้วยการGRUBดีบัก …
isomorphismes

คำตอบ:


55

ฉันมีปัญหาเดียวกันที่เกิดจากปัญหาจาก PPA สำหรับ toolchain ของ Ubuntu คอมพิวเตอร์ของฉันจะไม่บูตเพราะมัน ต่อไปนี้ @ คิดเห็น w00kie ในคำตอบของเขาผมดาวน์โหลด (จากสถานี TTY) เดเบียนของแพคเกจlibstdc++6สำหรับXenialที่ลิงค์https://packages.ubuntu.com/xenial/libstdc++6dpkg -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
คุณช่วยกรุณาใส่คำสั่งทีละขั้นตอนในคำตอบของคุณ? ฉันไม่คุ้นเคยกับสิ่งนี้เลยและเครื่อง linux ของฉันถูก horked ...
Zachary Fields

@ Zachary ปัญหาที่แน่นอนที่คุณเผชิญอยู่คืออะไร? คุณสามารถบูตได้หรือไม่?
Sagar Jha

1
ไม่ได้จริงๆ ถ้าฉันปล่อยให้หน้าจอกะพริบเป็นเวลาประมาณ 15 นาทีจากนั้นฉันจะได้รับการแจ้งเตือนขั้ว tty2 ในสีเทาอ่อนมาก ฉันไม่สามารถใช้apt(หรือเครื่องมือใด ๆ จริง ๆ ) ฉันได้ลองดาวน์โหลดlibstdc++6...debจากไดรฟ์ USB ที่สามารถบู๊ตได้แล้ววางแพคเกจด้วยตนเองรีบูตระบบที่เสียหายและติดตั้งการ.debใช้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 สำหรับ Ubuntu Toolchain (จำกัด )โดยเฉพาะ

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

มีความเป็นไปได้สองอย่างในการจัดการกับสิ่งนี้:

  • คุณได้ppa-purgeติดตั้งแล้ว แล้วก็

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

    แก้ไขปัญหา

  • แทนที่ libstc ++ โดยการดาวน์โหลดlibstdc ++ 6 สำหรับ Xenialdpkg -iและติดตั้งผ่านทาง


4
อย่างน้อยสำหรับฉันนี้ล้มเหลวด้วยข้อความเหมือนกับหนึ่งในคำถาม ...
mbdevpl

1
ควรขยายด้วยคำตอบจากด้านล่างเพราะเห็นได้ชัดว่าใช้ppa-purgeงานไม่ได้ (python เดียวกัน)
user64204

1
ฉันได้รับ:sudo: ppa-purge: command not found
การ์เร็ตต์

@Garrettsudo apt install ppa-purge
Nico Schlömer

3
@ NicoSchlömerขอบคุณ แต่จริง ๆ แล้วฉันเชื่อว่าฉันaptก็ไม่ทำงาน (ตามต้นฉบับ)
การ์เร็ตต์

8

คอมพ์ของฉันไม่สามารถบู๊ตได้อย่างถูกต้องเนื่องจากข้อผิดพลาดนี้ Apt-get ไม่ทำงานและ Gnome สิ่งนี้เกิดขึ้นทันทีหลังจากการอัพเกรดจาก 14.04 เป็น 16.04 ฉันแก้ไขมันด้วย tty โดยป้อน

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

ณ จุดนี้apt-getเริ่มทำงานอีกครั้งและฉันสามารถแก้ไข isues ทั้งหมดจากที่นั่น:

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 update ข้อผิดพลาดมาจากแบ็คเอนด์หลามฉันเดา stacktrace เป็นไพ ธ อนและมันบอกว่าโดยทั่วไปไม่สามารถหาโมดูล 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

ฉันคิดว่าปัญหาเป็นสิ่งที่แปลกใหม่สำหรับฉันและเกิดจากข้อผิดพลาดในการดาวน์โหลด

การสนทนานี้ให้เบาะแสที่ฉันต้องการ โดยพื้นฐานแล้วสิ่งที่จำเป็นทั้งหมดคือการแทนที่ libstdc ++. so.6.0.22 ด้วย libstdc ++. so.6.0.21 ใน / usr / lib / x86_64-linux-gnu ของระบบที่ล้มเหลว (ดูเหมือนว่ามีข้อผิดพลาดในรุ่นที่ใหม่กว่า)

สามารถทำได้จาก thumb-drive หรือในกรณีของฉันจาก scratch disk

รายละเอียดทั้งหมดได้ที่: https://answers.launchpad.net/ubuntu/+question/395832

ขอบคุณทุกคน...


ฉันใช้เคล็ดลับนี้ แต่ใช้การบูทสองครั้งในพื้นที่ว่าง ฉันสามารถติดตั้งพาร์ติชันดั้งเดิมได้อย่างง่ายดาย มันค่อนข้างง่าย
แอนดรู

ดีเลิศ - 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

หากคุณมีสแน็ป 'conjure-up' เวอร์ชันล่าสุดติดตั้งกับ Snappy ใน Yakkety 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 (หรืออาจเป็น 'สแน็ปย้อนกลับ' เป็นเวอร์ชันก่อนหน้าหากคุณติดตั้งไว้ก่อนหน้านี้)


1

การแก้ไขที่ใช้งานได้สำหรับฉันคือการเพิ่ม Ubuntu toolchain ppa back:

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 install

โดยไม่ต้องระบุแพคเกจใด ๆ มันควรจะทำงาน


0

อาจมีปัญหาที่คล้ายกันมากกับระบบ i386

เพื่อแก้ปัญหาที่ฉันยังมีการปรับลด GCC-5-ฐานมาจากเวอร์ชั่นที่จะ5.4.1-2ubuntu1~12.045.4.0-6ubuntu1~16.04.4

เพื่อให้การอัปเกรดเป็นระบบที่สมเหตุสมผลฉันยังต้องใช้dpkg --purge on vituoso_nepomukและ virtualbox เพื่อกำจัดไฟล์การกำหนดค่าของพวกเขาซึ่งเป็นสาเหตุของปัญหา )

กุญแจสำคัญคือการได้dpkg --configure dbusทำงาน

เพื่อเปิดใช้งาน wget ในขณะที่อยู่ในหน้าจอประเภท tty ผู้ใช้อาจต้องดำเนินการsudo dhclient eth0เพื่อเปิดใช้งานการเชื่อมต่ออีเธอร์เน็ตแบบใช้สาย


0

ฉันเพิ่งมีปัญหานี้เมื่ออัพเกรด ubuntu แจกจ่ายบน linux ฉันเห็นว่า:

# 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. ดาวน์โหลด libstdc ++ 6 สำหรับ Ubuntu ของคุณจากเว็บไซต์เครื่องมือจัดการแพคเกจ Ubuntu (ใช้uname -aเพื่อค้นหาสถาปัตยกรรม h / w และ s / w)

  2. วิ่ง

    sudo dpkg --install --auto-deconfigure libstdc++6...deb
    
  3. Reboot Ubuntu ควรบูต แต่จะไม่ติดตั้งแพ็คเกจใหม่

  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.