Bunun nedenlerinden biri, GCC'nin kendi C standart kütüphanesine sahip (örneğin MacOSX, Solaris, HPUX veya bazı FreeBSD gibi tescilli Unix sistemleri) üzerine kurulabilmesi ve kullanılabilmesidir .
Linux'ta bile, GNU Glibc olmayan bir C standart kütüphanesine sahip olabilirsiniz . Özellikle, GCC inşa edebilirsiniz (veya kullanmak) ile Linux sistemlerinde musl-libc'nin veya Bionic (Android sistemleri) veya dietlibc GNU Glibc olabilir vs. Ve Linux sistemi ve benzeri (bazı diğer C derleyicisi kullanabilirsiniz Clang veya TinyCC).
Ayrıca, C kütüphanesi büyük ölçüde Linux çekirdeğine bağlıdır. Çekirdeğin bazı eski sürümleri, belirli bir tür (veya sürüm) gerektirebilir.libc
Ve GCC bir çapraz derleyici olarak üretilebilir .
Ve "bir mainfonksiyonun nasıl çağrılacağı" gibi detaylar da derleyiciye bağlıdır, ama aslında bu detaylar libc.sobir Linux sisteminde sağlanır.
Bu tam olarak doğru değil. Bu mainişlev (barındırılan bir ortamda) bazıları GCC tarafından sağlanan crt0 şeyler tarafından çağrılır (örn /usr/lib/gcc/x86_64-linux-gnu/6/crtbegin.o. Debian / Sid / x86-64 libgcc-6-devpaketinde bulunur). Hakkında da okuyunlibgcc
Aslında, libcve GCC arasında yarı gizli bir ilişki vardır, çünkü birçok libcüstbilgi (isteğe bağlı olarak) bazı gcc yerleşiklerini veya işlev niteliklerini kullanıyor .
(dolayısıyla GCC geliştiricileri ve GNU libc geliştiricilerinin etkileşimde bulunması gerekir)
.... derleyiciyi başka bir ABI ile çalışacak şekilde değiştirirsem ...
Sen hiç ... gerekecektir /configureGCC derleyicisi ve onu yeniden ve hatta gerekebilir yama (sizin ABİ ve açıklamak için GCC derleyicisi arama kuralları ). X32 ABI iyi bir örnektir.
Sonunda, GCC'ye katkıda bulunanlar veya sahipleri (ben dahil) , GNU'yu değil GCC'yi kapsayan bir telif hakkı ataması imzaladı glibc.
(GCC lisansıyla ilgili olarak, GCC çalışma zamanı kitaplığı istisnasını dikkatlice okuyun )
GCC gibi <limits.h>veya bu standart başlıkların <stdint.h>sağlandığına dikkat edin ; <stdlib.h>GCC derlemesi sırasında "sabit" olan diğerleri : derleyici derleme yordamı bunları Libc uygulamasından alır ve yamalar. Yine de, diğer standart başlıklar (muhtemelen <stdio.h>ve içerdiği iç başlıklar) libc. GCC FIXINCLUDES ve Sabit Başlık Dosyaları hakkında daha fazla bilgi edinin .
(fixincludes şey ben (Basile) hala iyi anlamadığım bir şey)
Sen ile derlemek olabilir gcc -v -H(çünkü gerçek programlar çalıştırmak hangi daha doğrusu anlamaya gccçalışan bir sürücü cc1derleyici, ldve collect2bağlayıcıları, ashatta (bağlantılıdır hangi kütüphaneler ve nesne dosyaları, ... vb montajcı,) ve bahsedilen başlıklar dahildir dolaylı olarak, C standart kütüphanesi ve crt0 dahil ). GCC seçenekleri hakkında daha fazla bilgi edinin .
BTW, GCC'nizin beklediği veya oluşturulduğu (örn. musl-libcVeya bazı dietlibc ) kitaplarından farklı bir C standart kitaplığı , uygun ekstra argümanları atlayarak gcc...