NASIL gcc kullanımı

From Lapis Wiki

Jump to: navigation, search
Bu makale NASIL bölümü serisinin bir parçasıdır
MasaÜstü Donanım Dağıtımlar
Tarayıcılar Programlama Linux ve Oyunlar

GCC versiyonun öğrenmek için

gcc -v

komutunu verin bendeki çıktı şu:

Yerleşik özellikler kullanılıyor.
Hedef: i686-pc-linux-gnu
../gcc-4.0-20051006/configure --host=i686-pc-linux-gnu --build=i686-pc-linux-gnu --prefix=/usr --enable-shared
--enable-languages=c,c++,objc --enable-threads=posix --enable-__cxa_atexit
seçenekleriyle yapılandırıldı.
Evre modeli: posix
gcc 4.0.3 20051006 (prerelease) sürümü

Basit bir program yazıp bunu gcc ile en sade şekilde derleyelim.

#include <stdio.h>
int main()
{
   printf("Merhaba\n");
   return 0;
}

ilk programımızı herhangi bir düzenleyici ile yazdıktan sonra merhaba.c adı ile kaydedelim ve derleyelim:


Kod:
gcc merhaba.c

Derleme işlemi bir hata olmaksızın biterse a.out isimli çalıştırılabilir bir dosya oluşur. Bu dosyayı çalıştıralım:

./a.out

Eğer çalıştırılabilir dosyaya kendimiz isim vermek istersek -o seçeneğini kullanmamız gerekir.


Kod:
gcc merhaba.c -o merhaba

Komutu ile çalıştırılabilir merhaba isminde bir dosya oluşturduk.

./merhaba

ile bu dosyayı çalıştırabiliriz.

Mesela getch() gibi standart kütüphanelerde olmayan fonksiyonlar için kullandığımız ncurses.h kitaplığını ekleyerek bir uygulama yazalım.

//merhaba.c
#include <ncurses.h>
int main()
{
 initscr();
 getch();
 endwin();
 printf("son\n");
 return 0;
}

Bunu gcc ile yukardaki gibi derlersek bir çok hata alırız. Aslında bunlar programımız ile ilgili bir hata değil, sadece gcc'ye ncurses kütüphanesini tanıtmamız gerekir.


Kod:
gcc merhaba.c -o merhaba -lncurses

Burda görüldüğü gibi -l (lüleburgazın l'si) parametresi ile gcc'ye kitaplığımızı tanıttık.

Bütün kitaplılara ait başlık dosyaları genellikle /usr/include dizini altındadır. Eğer farklı bir yerde ise -I parametresi ile yol tanımı yapılmalıdır.


Kod:
gcc merhaba.c -o merhaba -I/home/konuralp/Kutuphaneler -lncurses

Eğer kitaplıkların nesne dosyaları başka bir dizinde ise bubunda -L parametresi ile belirtilmesi gerekir.


Kod:
-lncurses

Aynı şekilde mysql kütüphanesi için -lmysql, matematik için -lm, şifreleme için -lcrypt, postgresql için -lpq, POSIX için -lpthread, glib için -lglib, vga için -lvga kullanılabilir.


Kod:
gcc merhaba.c -o merhaba -I/home/konuralp/Kutuphaneler -I/usr/include -L/usr/local/lib -lncurses -lmysql -lvga

İşlemci seçimi içi -m parametresini kullanabiliriz: -m386, -m486, -mpentium gibi:


Kod:
gcc merhaba.c -o merhaba -I/home/konuralp/Kutuphaneler -I/usr/include -L/usr/local/lib -lncurses -lmysql -lvga -mpentium

Programımızın kullandığı kütüphaneleri doğrudan programımız içine eklemek istersek -static parametresini kullanmalıyız. Tabi bu programın boyutunu artıracaktır.


Kod:
gcc merhaba.c -o merhaba -I/home/konuralp/Kutuphaneler -I/usr/include -L/usr/local/lib -lncurses -lmysql -lvga -mpentium -static

Bütün uyarıları görmek istemezsek -w parametresini kullanmalıyız. -Wall parametresi ile tüm uyarıları görebiliriz.

En iyileme için ise -O ( Osmanlının O'su ) parametresi kullanılır. -O0 eniyileme yapmaz. -O3 en yüksek düzeyde iyileme yapar. -Os ve -O2 ise kod boyutunu kısaltacak eniyilemeler yapar. Dikkat edilecek olan husus uygulama içerisinde eniyileme komutları arttıkça seg_fault verme ihtimali de yükselebilir zira uygulama içinde farklı kitaplıklar kullanılması ve kitaplıkların global değişkenler ile kullanılması durumunda bir takım sorunlar oluşabilir.

Yararlanılan kaynaklar

Belgeler.org

Linux Programlama