Score:2

เวอร์ชันของ libgcc-s1 และ gcc-base เทียบกับเวอร์ชัน GCC เริ่มต้นใน 20.04 LTS

ธง cn

Ubuntu 20.04 LTS (อย่างน้อยอิมเมจนักเทียบท่าหลัก) แจกจ่ายด้วย libgcc-s1 และ gcc-10-base เวอร์ชัน 10.3.0(-1ubuntu1~20.04) ดู เช่น รายการที่ https://partner-images.canonical.com/core/focal/20211103/ubuntu-focal-core-cloudimg-amd64.manifest .

เวอร์ชันเริ่มต้นของ GCC ใน 20.04 LTS คือ GCC 9 ไม่ใช่ GCC 10

คำอธิบายสำหรับความแตกต่างที่ชัดเจนนี้คืออะไร - ทำไมไม่แจกจ่ายแพ็คเกจเหล่านั้นในเวอร์ชัน 9.x สิ่งนี้เกี่ยวข้องกับเวอร์ชันของ GCC ที่ใช้ในการรวบรวมแพ็คเกจที่ใช้ C ใน 20.04LTS หรือไม่ แพ็คเกจ C-based ส่วนใหญ่ (ทั้งหมด?) 20.04 LTS คอมไพล์ด้วย GCC 10 หรือไม่

guiverc avatar
cn flag
`gcc` & `gcc-10-base` เป็นแพ็คเกจที่แตกต่างกัน Ubuntu 20.04 LTS ใช้ gcc `gcc | 4:9.3.0-1ubuntu2 | โฟกัส | amd64, arm64, armhf, i386, ppc64el, riscv64, s390x` แต่ยังมี `gcc-10` (https://packages.ubuntu.com/focal/gcc-10) ซึ่งใช้สำหรับรวบรวมตัวเลือกบางอย่าง
cn flag
ดังนั้นแพ็คเกจ C-based บางส่วน (ทั้งหมด) ที่ 20.04 LTS จึงรวบรวมด้วย GCC 10?
guiverc avatar
cn flag
ขออภัยฉันไม่สามารถพูดกับผู้มีอำนาจเกี่ยวกับสิ่งที่รวบรวม; ฉันคาดหวังว่าแพ็คเกจที่เกี่ยวข้องกับเคอร์เนลจะถูกคอมไพล์โดยเวอร์ชันที่ใหม่กว่า แต่ฉันไม่ได้ตรวจสอบ `gcc` ซึ่งขออภัยอย่างยิ่ง
Knud Larsen avatar
by flag
Ubuntu 20.04 "focal-updates **universe**" : gcc-10 (10.3.0-1ubuntu1~20.04) https://packages.ubuntu.com/focal-updates/gcc-10 ........ . ( gcc เริ่มต้นยังคงเป็น v9 )
Score:0
ธง us

ข้อจำกัดความรับผิดชอบ: ฉันค่อนข้างใหม่กับ Ubuntu ฉันมีประสบการณ์พอสมควรกับ RHEL และ SLES และต้องเรียนรู้เวอร์ชัน Ubuntu LTS เมื่อเร็ว ๆ นี้เนื่องจากฮาร์ดแวร์ ARM64 บางตัวที่ไม่ต้องการบูตอย่างอื่น

สรุป

แน่นอนว่า Ubuntu มักจะมาพร้อมกับส่วนประกอบบางอย่างจาก GCC ที่ใหม่กว่ากว่า GCC เริ่มต้นของรุ่นที่วางจำหน่าย เห็นได้ชัดว่าพวกเขาทำเช่นนี้เพื่อให้สามารถจัดเตรียมเวอร์ชันคอมไพเลอร์ที่ใหม่กว่าได้ ถ้า คุณต้องการใช้มัน

  • แพ็คเกจ gcc-10-base ให้เอกสารประกอบเท่านั้น
  • แพ็คเกจ libgcc-s1 มีไลบรารีที่สำคัญ libgcc_s.so.1. ที่ให้ฟังก์ชันตัวช่วยสำหรับรหัสที่สร้างโดยคอมไพเลอร์: ฉันรู้ว่ามันเป็นสิ่งสำคัญสำหรับการจัดการข้อยกเว้น C++ ที่ถูกโยนผ่าน C call stack
  • ห้องสมุดที่สำคัญอีกแห่งคือ libstdc++.so.6. ที่ให้ฟังก์ชันสนับสนุน C++
  • Glibc (libc.so.6, libm.so.6 และไลบรารีอื่นๆ) ก็มีความสำคัญเช่นกัน แต่ไม่เชื่อมโยงกับเวอร์ชัน GCC

ไลบรารีเหล่านี้ทั้งหมดมีกฎความเข้ากันได้ที่เข้มงวดมาก โดยพื้นฐานแล้ว เวอร์ชันที่ใหม่กว่าของไลบรารีจะเข้ากันได้กับเวอร์ชันก่อนหน้าเสมอ โดยเป็นส่วนลดเวอร์ชันเก่าบางเวอร์ชันจากประวัติช่วงต้นของ GCC และ Linux

ในตอนแรกไม่ชัดเจนว่าทำไม Ubuntu และ Debian จึงให้รันไทม์ที่ช้ากว่าคอมไพเลอร์ แต่จะชัดเจนขึ้นเมื่อคุณดูช่วงของเวอร์ชัน GCC ที่มีใน Ubuntu เวอร์ชัน LTS ล่าสุด:

การกระจาย เผยแพร่ Debian GCC รันไทม์ เริ่มต้น GCC GCC เพิ่มเติม
Ubuntu 16.04 เม.ย. 2559 9.x 5.x 5.4 4.7, 4.8, 4.9
Ubuntu 18.04 เม.ย. 2018 10.x 8.x 7.5 4.8, 5.5, 6.5 8.4
Ubuntu 20.04 เม.ย. 2020 11.x 9.x & 10.x 9.3 7.4, 8.4, 10.3

เมื่อถึงจุดนั้นมันจะชัดเจนพอสมควร Ubuntu 20.04 มีรันไทม์สำหรับโค้ดที่คอมไพล์ด้วย GCC 9.x และ 10.x (GCC 10.x ไม่ต้องการฟังก์ชันไลบรารีเพิ่มเติมใดๆ ที่ GCC 9.x ไม่ได้ใช้) คุณสามารถติดตั้งส่วนผสมของ GCC 7.4, 8.4 และ 10.3 เป็นคอมไพเลอร์เสริม และพวกมันทั้งหมดจะทำงานได้ ไลบรารีรันไทม์บน Ubuntu 20.04 จะรองรับโค้ดที่คอมไพล์ด้วยคอมไพเลอร์เหล่านั้น

ทำไมไม่จัดส่ง GCC 10.3 กับ Ubuntu 20.04 ไลบรารีรันไทม์โดยทั่วไปจะเสถียรกว่าคอมไพเลอร์ GCC 10 จะได้รับการเผยแพร่ครั้งแรก (เป็น 10.1) ในช่วงเวลาที่มีการรวบรวม 20.04 การสร้างรีลีส LTS ด้วยคอมไพเลอร์ใหม่ล่าสุดอาจเป็นเรื่องที่โง่เขลา จัดส่งไลบรารีรันไทม์ใหม่ หลังจากทดสอบด้วยโค้ดที่สร้างด้วย GCC 9 จะปลอดภัยกว่ามาก และอนุญาตให้เพิ่ม GCC 10 เมื่อเสถียรแล้ว

Canonical ไม่มี GCC 11 สำหรับ 20.04 เนื่องจากไม่มีเวลาทำงานที่จำเป็น คุณต้องใช้ Ubuntu รุ่นหลัง

จะหาสิ่งเหล่านี้ได้อย่างไร

/usr/share/doc/gcc/README.Debian มีข้อมูลบางอย่าง และ Ununtu 20.04 ใช้ Debian 11 âBullseyeâ

dpkg-query --listfiles gcc-10-base แสดงให้เราเห็นว่า gcc-10-base ให้เฉพาะเอกสารเท่านั้น

dpkg-แบบสอบถาม --listfiles libgcc-s1 แสดงให้เราเห็นว่า libgcc-s1 มีให้ /lib/x86_64-linux-gnu/libgcc_s.so.1ซึ่งเป็นหนึ่งในไลบรารีรันไทม์พื้นฐานสำหรับ GCC

ไลบรารีรันไทม์พื้นฐานอื่นๆ สำหรับ C/C++ คือ glibc ซึ่งไม่ขึ้นกับ GCC และ libstdc++ dpkg-query -list | grep libstdc แสดงให้เราเห็นสองแพ็คเกจ:

ii libstdc++-9-dev:amd64 9.3.0-17ubuntu1~20.04 amd64 GNU Standard C++ Library v3 ...
ii libstdc++6:amd64 10.3.0-1ubuntu1~20.04 amd64 GNU Standard C++ Library v3

libstdc++6 เป็นเวอร์ชัน GCC 10.3; เดอะ - พัฒนา แพ็คเกจเป็นรุ่น GCC 9.3

dpkg-query --listfiles libstdc++-9-dev แสดงให้เราเห็นว่าแพ็คเกจนี้มีไฟล์ส่วนหัว ไลบรารีไฟล์เก็บถาวร และเอกสารประกอบสำหรับการพัฒนาใน C++ ด้วย GCC 9

dpkg-แบบสอบถาม --listfiles libstdc++6 แสดงให้เราเห็นว่าแพ็คเกจนี้มีเอกสารประกอบ สคริปต์ Python และไฟล์สำคัญสองไฟล์:

/usr/lib/x86_64-linux-gnu/libstdc++.so.6
/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.28

เดอะ .so.6 ไฟล์คือสิ่งที่โปรแกรมเชื่อมโยงกับ มันเป็นซอฟต์ลิงค์ไปยัง .so.6.028 ไฟล์. นั่นคือชื่อของ libstdc++ เวอร์ชัน GCC 10 ซึ่งเป็นไลบรารีที่รองรับ GCC สำหรับ C++ คุณสามารถรับการแมประหว่างชื่อเหล่านั้นกับเวอร์ชัน GCC ที่นี่. เลื่อนลงมาแล้วคุณจะพบตาราง

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา