Standart C Programlama Dili


B.1.1 GCC Derleme Aşamaları

Birçok yazılım dilinde olduğu gibi, C dilinde yazılmış bir kaynak kodun derlenip yürütülebilir bir koda dönüşmesi için çeşitli aşamalardan geçmesi gerekmektedir. Bu aşamalar aşağıda özetlenmiştir:

Kaynak kod dosyaları: .c, .h

ÖNİŞLEME

Önişlemci çıktı dosyaları: .i

DERLEME

Birleştirici dil dosyaları: .s

BİRLEŞTİRME

Amaç kod dosyaları: .o

BAĞLAMA

Yürütülebilir kod dosyaları: Örn. a.out

Önceki kısımda da gördüğümüz gibi, basitçe

$ gcc prog.c

komutu yazıldığında, tüm bu aşamalar sessiz bir şekilde geçilir ve eğer herhangi bir aşamada hata alınmazsa, a.out yürütülebilir kod dosyası oluşur. Böyle bir durumda, yukarıda bahsi geçen ara dosyalar (.i, .s ve .o) saklanmaz, komutun normal veya hatalı bittiğine bakılmaksızın bunlar otomatik olarak silinir. Bu aşamaların bazılarını atlamak için de kullanılabilecek bazı GCC komut örnekleri aşağıda verilmiştir.

gcc -E -o prog.i prog.c Sadece önişleme yapılır, diğer aşamalar atlanır. Oluşan önişleme çıktı dosyası prog.i’dir. Ek olarak -C seçeneği kullanıldığında, kaynak dosyaların içindeki açıklamalar silinmez.
gcc -S -fverbose-asm prog.c Derleme esnasında oluşan birleştirici dili kaynak kodu prog.s isimli dosyaya konur ve derleme işlemi durdurulur. -fverbose-asm seçeneği C kaynak kodundaki değişken isimlerinin, oluşturulan birleştirici dili dosyasında açıklama olarak saklanmasına olanak tanır.
gcc -c prog.c Önişleme, derleme ve birleştirme yapılır, ancak bağlama işlemi yapılmaz. Oluşan amaç kod prog.o dosyasında saklanır.
gcc -g -c -Wa,-a=prog.list,-L prog.c Burada, -Wa, seçeneği ile doğrudan birleştiriciyi ilgilendiren seçenekler (örneğin -a=prog.list ve -L) birleştiriciye geçirilir. Bu seçeneklerin başında ve aralarında virgül olmalıdır. Bu örnekte, birleştiricinin detaylı bir çıktı dosyası (prog.list) oluşturması ve bu dosyaya kaynak kodundan gelen satırları da eklemesi istenmektedir.
gcc prog.c -lm Eğer kaynak dosyada kullanılan bazı fonksiyonlar standart kütüphanede (libc.a) değil de, buradaki örnekte olduğu gibi, başka bir kütüphanede (libm.a) ise, komutun sonuna kütüphane dosya isminin başındaki lib ve sonundaki .a atılarak, kalan kısım (m) -l seçeneği ile arkasına boşluk bırakılmadan verilir. Eğer kütüphanenin bulunduğu dizin (/usr/lib gibi) standart bir dizin değilse, -l seçeneğinden önce -L ile arkasına boşluk bırakılmadan dizinin tam adı verilebilir.
gcc -Wl,-Map,prog.map prog.c Burada, -Wl, seçeneği ile doğrudan bağlayıcıyı ilgilendiren seçenekler (örneğin -Map ve prog.map) bağlayıcıya geçirilir. Bu seçeneklerin başında ve aralarında virgül olmalıdır. Bu örnekte, bağlayıcının bir bağlama programcığı ve oluşturulan çalıştırılabilir dosyanın bellek haritasının dökümünü oluşturup prog.map dosyasına koyması istenmektedir.
gcc -save-temps prog.c Derleme ve bağlamanın tüm aşamaları gerçekleştirilir ve yukarıda bahsi geçen prog.i, prog.s ve prog.o dosyaları da oluşturulur.
gcc -fsyntax-only prog.c Derleme ve bağlamanın hiçbir aşaması gerçekleştirilmez; sadece kaynak programın sözdizimsel olarak doğru olup olmadığı kontrol edilir.