หนึ่งในเหตุผลก็คือว่าGCCสามารถสร้างและใช้กับ (เช่นระบบ Unix เป็นกรรมสิทธิ์เช่น MacOSX โซลาริส HPUX หรือ FreeBSD) ระบบของตัวเองที่มีมาตรฐานห้องสมุด C
แม้ในลินุกซ์, คุณสามารถมีไลบรารีมาตรฐาน C ซึ่งไม่ได้เป็นGNU Glibc โดยเฉพาะคุณสามารถสร้าง GCC (หรือใช้) บนระบบ Linux ด้วยmusl-libcหรือBionic (ระบบ Android) หรือกับdietlibcเป็นต้นและระบบ Linux อาจมี GNU Glibc และใช้คอมไพเลอร์ C อื่น ๆ (เช่นClangหรือ TinyCC)
นอกจากนี้ไลบรารี C ขึ้นอยู่กับเคอร์เนลของ Linux เป็นอย่างมาก เคอร์เนลเวอร์ชันเก่าบางรุ่นอาจต้องการชนิด (หรือรุ่น) บางอย่างlibc
และ GCC เป็น buildable เป็นcompiler ข้าม
และรายละเอียดเช่น "วิธีการเรียกใช้mainฟังก์ชัน" ยังขึ้นอยู่กับคอมไพเลอร์ด้วย แต่ในความเป็นจริงรายละเอียดเหล่านั้นถูกจัดทำโดยlibc.soระบบ Linux
นั่นไม่ถูกต้องอย่างแน่นอน mainฟังก์ชั่นที่เรียกว่า (ในสภาพแวดล้อมที่เป็นเจ้าภาพ) โดยcrt0สิ่งบางอย่างที่ให้บริการโดย GCC (เช่น/usr/lib/gcc/x86_64-linux-gnu/6/crtbegin.oบนของ Debian / ซิด / x86-64 อยู่ห่างจากlibgcc-6-devแพคเกจ) อ่านเกี่ยวกับlibgcc
ที่จริงมีบางความสัมพันธ์ครึ่งซ่อนระหว่างlibcและ GCC เช่นเพราะหลายlibcส่วนหัวมี (ขยะ) โดยใช้ gcc บางbuiltinsหรือแอตทริบิวต์ของฟังก์ชั่น
(ด้วยเหตุนี้นักพัฒนา GCC และนักพัฒนา GNU libc จะต้องโต้ตอบกัน)
.... ถ้าฉันเปลี่ยนคอมไพเลอร์ให้ทำงานกับ ABI อื่น ...
คุณจะต้อง ... /configureคอมไพเลอร์ GCC และสร้างใหม่และคุณอาจต้องแก้ไขคอมไพเลอร์ GCC (เพื่ออธิบาย ABI ของคุณและการเรียกประชุม ) x32 ABIเป็นตัวอย่างที่ดี
ที่ล่าสุดร่วมสมทบบางส่วนหรือดูแลของ GCC (รวมทั้งผม) ได้ลงนามมอบหมายลิขสิทธิ์ซึ่งครอบคลุม GCC แต่ไม่ glibcGNU
(เกี่ยวกับสิทธิ์ใช้งาน GCC โปรดอ่านข้อยกเว้นของไลบรารีรันไทม์ GCCอย่างระมัดระวัง)
โปรดสังเกตว่าส่วนหัวมาตรฐานบางอย่างเช่น<limits.h>หรือ<stdint.h>จัดหาโดย GCC อื่น ๆ เช่น<stdlib.h>"คงที่" ในระหว่างการสร้าง GCC: ขั้นตอนการสร้างคอมไพเลอร์นำพวกเขาจากการใช้ Libc และแก้ไขพวกเขา ยังคงหัวมาตรฐานอื่น ๆ (อาจ<stdio.h>และหัวต่อภายในมันจะรวมถึง) libcถูกนำมาจาก อ่านเพิ่มเติมเกี่ยวกับGCC FIXINCLUDESและส่วนหัวของแฟ้มคงที่
(สิ่งที่รวมอยู่คือสิ่งที่ฉัน (Basile) ยังไม่เข้าใจดี)
คุณสามารถรวบรวมgcc -v -Hเพื่อทำความเข้าใจได้อย่างแม่นยำมากขึ้นว่าโปรแกรมจริงใดที่ทำงานอยู่ (เนื่องจากgccเป็นไดร์เวอร์, รันcc1คอมไพเลอร์, ld& collect2linkers, แอสasเซมเบลอร์, ฯลฯ ... ) และส่วนหัวใดรวมอยู่ด้วย โดยนัยรวมถึงไลบรารีมาตรฐาน C และcrt0 ) อ่านเพิ่มเติมเกี่ยวกับ GCC ตัวเลือก
BTW คุณสามารถใช้ไลบรารีมาตรฐาน C ที่แตกต่างจาก GCC ที่คุณคาดหวังหรือสร้างขึ้นสำหรับ (เช่นmusl-libcหรือdietlibcบางส่วน) โดยข้ามอาร์กิวเมนต์พิเศษที่เหมาะสมเพื่อgcc...