ไม่มีปัญหาเรื่องไก่และไข่ตั้งแต่ GCC เขียนใน C ++ เอง?


10

ตั้งแต่ 4.8 รีลีส C ++ คอมไพเลอร์ GCC (ส่วน G ++) จะถูกเขียนไม่ได้อยู่ใน C อีกต่อไป แต่ใน C ++ ฉันมีคำถามสมมุติในเรื่องนี้

ฉันสงสัยว่าจะรวบรวมรหัส C ++ ของ GCC บนแพลตฟอร์มใหม่ที่ไม่มีคอมไพเลอร์ C ++ ได้อย่างไร แน่นอนคุณสามารถใช้ไบนารีที่สร้างไว้ล่วงหน้าซึ่งรวบรวมไว้ในเครื่องอื่น ๆ หรือคุณสามารถใช้ GCC รุ่นเก่ากว่าที่เขียนใน C และคอมไพล์เวอร์ชันปัจจุบันด้วย

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


3
ฉันไม่แน่ใจว่าสิ่งที่คุณจะถามนี่ แต่คุณอาจต้องการที่จะอ่านเกี่ยวกับการรวบรวมข้าม

5
แพลตฟอร์มใหม่ทั้งหมดจะไม่มีคอมไพเลอร์ C ++ หรือคอมไพเลอร์ C การรวบรวมข้ามเป็นคำตอบ
doc

1
คุณควรอ่านการย้ายของ GCC ไปที่ C ++ , การย้ายไปที่ C ++และอาจเป็นการสนทนาที่GCC จะต้องใช้ C ++ เพื่อสร้างบน reddit ฉันไม่แน่ใจว่าgccก่อนหน้า 4.8 สามารถสร้างขึ้นด้วยคอมไพเลอร์ C ที่บรรจุด้วยระบบปฏิบัติการโดยพลการ (และนั่นจะ จำกัด คุณไว้ที่ C89 ในหลาย ๆ )

2
ฉันไม่ได้รับอะไรพิเศษเกี่ยวกับ C ++ สำหรับคำถามนี้มีปัญหากับ C หรือภาษาอื่นใช่ไหม
RemcoGerlich

คำตอบ:


16

นี้เป็นจริงเป็นที่รู้จักกันดีแนวคิดที่เรียกว่าความร่วมมือ โดยทั่วไปมีบางส่วนที่เป็นรหัสฐาน C ขั้นต่ำในการสร้าง GCC รุ่นที่สามารถสร้างรหัสฐาน GCC ปัจจุบันได้ ภาษาที่ให้บริการพื้นที่ด้วยตนเองได้ทำสิ่งต่างๆมาหลายทศวรรษ


จริงๆแล้วไม่มี นั่นไม่ใช่กรณีอีกต่อไป (และปัญหากับคำถาม) gccไม่สามารถสร้างโดยคอมไพเลอร์ ac เท่านั้นอีกต่อไป การรับประกันเพียงอย่างเดียวกับคอมไพล์ gcc ที่พวกเขาทำคือ gcc เวอร์ชัน N สามารถสร้างได้ด้วย gcc เวอร์ชัน N-1

9
@MichaelT: แต่รุ่นก่อนหน้าของ GCC สามารถสร้างขึ้นด้วยคอมไพเลอร์ C ซึ่งสามารถรวบรวมรุ่นที่ใหม่กว่าเขียนใน C ++ ซึ่งเป็นสิ่งที่ฉันพูด
Mason Wheeler

ฉันจะชี้ไปที่คำถามในคำถาม: However, without prebuilt binaries and just the newest version, you were stuck, right? If not, are there other implications on this situation raised by the switch from C to C++ of the GCC project?- มันอนุมานว่าคุณไม่สามารถเข้าถึงรุ่นก่อนหน้าหรือไม่ได้อยู่ที่ความหมายอื่น ๆ ของการเปลี่ยนจาก C เป็น C ++ สำหรับ codebase

9

สร้างคอมไพเลอร์ที่เขียนในภาษาเดียวกันว่ามันรวบรวมจะเรียกว่าเป็นความร่วมมือ บทความวิกิพีเดียอธิบายหลายวิธีที่คอมไพเลอร์สามารถ bootstrapped

ได้รับข้อ จำกัด ของคุณว่าคุณมีเพียงโพสต์ 4.8 G ++ รหัสแหล่งที่มาและไม่มีไบนารีที่สร้างไว้ล่วงหน้าสำหรับแพลตฟอร์มเป้าหมายของคุณ (ไม่ที่มีอยู่ C ++ คอมไพเลอร์) แล้ว bootstrapping จี ++ คอมไพเลอร์สามารถทำได้โดยวิธีการข้ามรวบรวม

เมื่อทำการบูตคอมไพเลอร์โดยใช้การคอมไพล์ข้ามคุณจะสร้างคอมไพเลอร์หลายเวอร์ชัน

  1. บนพีซีของคุณคุณติดตั้งคอมไพเลอร์ C ++ (สามารถเป็นคอมไพเลอร์ C ++ ใด ๆ ก็ได้โดยไม่ต้องเป็น G ++)
  2. การใช้คอมไพเลอร์นั้นคุณสร้าง G ++ cross-compiler ที่สามารถเรียกใช้งานบนพีซีและสร้างรหัสสำหรับแพลตฟอร์มเป้าหมาย
  3. การใช้ตัวรวบรวมข้าม G ++ ที่คุณเพิ่งสร้างขึ้นคุณสร้างคอมไพเลอร์ G ++ ดั้งเดิมที่สามารถเรียกใช้บนแพลตฟอร์มเป้าหมายและสร้างรหัสสำหรับมัน
  4. คุณทำเสร็จแล้ว คุณได้สร้างคอมไพเลอร์ C ++ สำหรับแพลตฟอร์มใหม่

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.