NASIL gcc kullanımı
From Lapis Wiki
Bu makale NASIL bölümü serisinin bir parçasıdır
|
| MasaÜstü • Donanım • Ağ • 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
