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 main
fonksiyonun nasıl çağrılacağı" gibi detaylar da derleyiciye bağlıdır, ama aslında bu detaylar libc.so
bir Linux sisteminde sağlanır.
Bu tam olarak doğru değil. Bu main
iş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-dev
paketinde bulunur). Hakkında da okuyunlibgcc
Aslında, libc
ve 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 /configure
GCC 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ü cc1
derleyici, ld
ve collect2
bağlayıcıları, as
hatta (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-libc
Veya bazı dietlibc ) kitaplarından farklı bir C standart kitaplığı , uygun ekstra argümanları atlayarak gcc
...