Welcome, Guest. Please login or register.
Did you miss your activation email?
09 September, 2010, 12:19:59 pm
Home | Help | Search | Login | Register

Lazarus and FreePascal

written by alivardar | 2245 Views | Rating: (1 rates)
Dökümanlar
GCC Kullanımı
GCC harfleri GNU Compiler Collection kelimlerinin baş harflerinden oluşur. Gercek
ismini GNU C Compiler kelimelerinden almaktadır. Bu değişikliğin sebebi GCC
eskiden sadece C derleyicisinden oluşmakta olduğudur. Diğer diller daha sonradan GCC

ailesine eklenmiştir. Bu konuda bilgi icin ;

http://en.wikipedia.org/wiki/GNU_Compiler_Collection adresine bir ziyaret yapılabilir.
http://gcc.gnu.org/ adresinden GCC son surumleri takip edebilirsiniz.
GCC surumunuzu oğrenmek icin;

bash-2.05b# gcc -v

Reading specs from /usr/lib/gcc-lib/i386-slackware-linux/3.2.2/specs

Configured with: ../gcc-3.2.2/configure --prefix=/usr --enable-shared

--enable-threads=posix --enable-__cxa_atexit --disable-checking --withgnu-

ld --verbose --target=i386-slackware-linux --host=i386-slackwarelinux

Thread model: posix

gcc version 3.2.2

Benim sistemimde donen sonuc yukarıdaki şekildedir.

Derleyicinin uygulamaları doğru bir şekilde derlemesi icin bir takım

parametrelerin doğru olarak verilmesi gerekmektedir. En basit şekli

ile uygulamamızı yazalım ve ilk derleme işlemimize gecelim.

#include

int main()

{

printf("Örnek uygulama");

}

Yukarıdaki en basit uygulamamızdan başlamış olduk. Şimdi bu uygulamamızı derlemeye
gecelim. Uygulamayı istediğimiz bir editor ile yazdıktan sonra ilk.c olarak kayededelim
ve aşağıdaki satırları yazalım.

#gcc ilk.c

Bu satırdan sonra uygulamada hata yok ise veya bir uyarı mesajı vermezse uygulam
derlenir. Kaynak kodun olduğu dizine bakıldığı zaman a.out isimli bir dosyanın oluştuğu
gorulecektir. Uygulamamızı bir isim vermeden derledik bu gibi durumlarda gcc
varsayılan olarak a.out dosya adını kullanacaktır. Şimdide uygulamamızı kendi ismiyle
derleyelim. Bu amacla -o parametresi kullanılacaktır. -o parametresi cıkış dosya adını
belirtmektedir.

#gcc ilk.c -o ilk

Komut satırından sonra ilgili dizin icerisinde artık bir ilk isimli calıştırılabilir dosya

oluşacaktır. Bu aşamadan sonra artık basit bir uygulamanın derlenmesi işlemi anlaşılmış

oldu. Peki ya uygulama icerisinde dışarıdan bir takım kitaplıklar eklenmek istenirse nasıl

M.Ali VARDAR 2003-2005 – GCC Kullanımı

derlenmelidir? Bu aşamada ornek basit uygulamamız uzerinde bir iki ufak değişiklik

yapalım;

#include

int main()

{

initscr();

getch();

endwin();

printf("bitti\n");

}

Standart kitaplıklar kullanıldığı zaman getch() fonksiyonu yoktur. Ancak eğer ncurses
kullanılması durumunda bu komut mevcuttur. Dikkat edilecek olursa stdio.h
uygulamaya eklenmedi. On bilgi olarak ncurses.h kullanılması durumunda stdio.h

kullanılmasına gerek yoktur. Bu uygulamayı aynı şekilde aşağıdaki ilk oğrendiğimiz

standart derleme yontemi ile derleyelim.

# gcc ilk.c -o ilk

/tmp/cchah5Wx.o: In function `main':

/tmp/cchah5Wx.o(.text+0x7): undefined reference to `initscr'

/tmp/cchah5Wx.o(.text+0x10): undefined reference to `stdscr'

/tmp/cchah5Wx.o(.text+0x15): undefined reference to `wgetch'

/tmp/cchah5Wx.o(.text+0x1d): undefined reference to `endwin'

collect2: ld returned 1 exit status

GCC bize bir cok tanımlanmamış komut olduğunu hata olarak vermektedir. Aslında

bunlar hata değil bunu biliyoruz ancak bu komutlar ncurses kitaplığı icerisindedir. Bizim

yapmamız gereken ncurses kitaplığının bayrağını derleme parametresine eklemek

olacaktır.

# gcc ilk.c -o ilk -lncurses

Bu komuttan sonra uygulama hata vermeden derleme işlemini gercekleştirecektir. Onemli

hatırlatma, uygulamaya eklenecek olan kitaplıklar ve kutuphaneler eğer sistemde standart

olan yerlerde mevcut ise ki bu standart yerler nerelerdir. Bu tanım dağıtımlara gore

farklılıklar gosterebilir ancak tum kutuphanelere ait ekleme dizinleri genel olarak

/usr/include icindedir. Eğer bu başlık dosyaları farklı bir yerde oldukları belirtilmek
istenmesi durumunda farklı bir parametre daha eklemektedir.

# gcc ilk.c -o ilk -I/usr/include -lncurses

satırı da aynı şekilde uygulamamızı sorunsuz olarak derleyecektir. Burada uygulamamız
icine eklenen başlık dosyalarını araması icin standart path dışında /usr/include dizinini
de eklemiş olduk. Şu aşamadan itibaren ncurses kitaplıklarını uygulamamız icerisine
ekleyebiliyoruz ve istediğimiz ncurses komutlarını kullanabiliriz. Bunun yanında mysql
kitaplıklarını da uygulamaya katmak istersek uygulamamızı aşağıdaki şekle sokalım;
M.Ali VARDAR 2003-2005 – GCC Kullanımı

#include

#include

int main()

{

initscr();

getch();

endwin();

printf("bitti\n");

}

En son derleme satırımız ile derleyelim. Aynı zamanda -lmysql ile mysql kitaplıklarını
kullanacağımızı belirtelim.

# gcc ilk.c -o ilk -I/usr/include -lncurses -lmysql

ve sonuc;

ilk.c:2:19: mysql.h: No such file or directory

neden mysql.h bulamadı halbuki -I/usr/include yazdık, peki sistemde ufak bir arama
yapalım bakalım doğrumu yazdık?

# locate mysql.h

/usr/share/apps/quanta/doc/php/ref.mysql.html

/usr/include/mysql/mysql.h

işte aradığımız satır. mysql.h dosyası /usr/include/mysql dizini icin de bulunmakta
imiş oyleyse derleme parametresinde bir değişiklik yapalım.

# gcc ilk.c -o ilk -I/usr/include -I/usr/include/mysql -lncurses -lmysql

ve sonuc başarılı olacaktır. Bu şekilde istendiği kadar
kitaplığı uygulamamız icerisine ekleyebiliriz. Eğer aranan uygulama farklı bir dizin
icerisinde ise oyleyse -L parametresi ile bu kutuphanenin yolunu tanımlamalıyız. Ornek
olarak;

# gcc ilk.c -o ilk -I/usr/include -I/usr/include/mysql -L/usr/local/lib

-lncurses -lmysql

Aynı şekilde matematik kutuphanesini uygulamamızda kullanacaksak -lm eklemeliyiz.
şifreleme algoritmasını kullanacaksak -lcrypt, postgresql icin -lpq, thread kullanımı
icin -lpthread, glib kutuphanesini kullanmak icin -lglib, vga kitaplıklarını kullanmak
icin -lvga ornek olarak verebiliriz. Bu kullanım ornekleri sisteminize kurduğunuz
kitaplıkların miktarına gore değişmektedir. Şimdide GCC ile kullanabileceğimiz bir
takım parametrelere gelelim. -m parametresi CPU secimli olara derleme işlemini
gercekleştirmektedir.
386 komut seti icin -m386
486 komut seti icin -m486
pentium komut seti icin -mpentium parametresi verilmelidir. Ornek olarak;

# gcc ilk.c -o ilk -I/usr/include -I/usr/include/mysql -lncurses

-lmysql -mpentium

M.Ali VARDAR 2003-2005 – GCC Kullanımı

komutu sonrası uygulama pentium işlemci icin derlenmiş olacaktır. 486 secimli derleme

işleminden sonra ozellikle buyuk uygulamalardan sonra kodda bir miktar buyume

olabilir, ancak bu hız ile ters orantılı olarak artırmaktadır. Diğer onemli bir kullanım şekli

uygulamaya eklenmiş olan kitaplıkları statik olarak uygulama icerisine eklemektir. Bu

şekilde uygulama calıttırılabilir kod icerisine kitaplıklarda eklenecektir. Bu işlemi ornek

uygulamamız icinde deneyelim;

# gcc ilk.c -o ilk -I/usr/include -I/usr/include/mysql -lncurses

-lmysql -mpentium -static

Her iki farklı derleme şeklinden sonra uygulamanın buyukluğune dikkat ediniz,
buyukluğunde epey bir fark oldudu gorulecektir. Uygulama icerisinde verilen hata
mesajları haricinde bir takım uyarı mesajları bulunmaktadır. Ornek olarak gostereceğimiz
var olan değişkenin tanımlanmış olmasına rağmen kullanılmaması gibi;
Uygulama icerisinde bir değişken tanımlayalım ve derleyelim; Derleme parametresine ek
olarak -Wall parametresini ekleyelim.

gcc ilk.c -o ilk -I/usr/include -I/usr/include/mysql -lcurses -Wall

ilk.c: In function `main':

ilk.c:5: warning: unused variable `a'

ilk.c:10: warning: control reaches end of non-void function

aşağıdaki şekilde karşımıza uyarı mesajları cıkmaya başlayacaktır. Eğer uygulama
icerisinde optimizasyon yapılmasına onem verilmesi durumunda bu gereksiz olan
değişkenler temizlenmelidir. -w parametresi ile birlikte tum uyarı mesajlarının ekrana
cıkmasına engel olunur. GCC aynı zamanda kendi icerisinde yazılmış olan kodlar
uzerinde optimizasyon yapmaktadır. Bu amacla -O parametresi kullanılmaktadır. Ornek
uygulamamızı aşağıdaki şekilde derleyelim.

# gcc ilk.c -o ilk -I/usr/include -I/usr/include/mysql -lcurses -O1

Bu parametre -O0, -O1, -O2, -O3 değerlerini alabilir. 0 hic optimize yaptırmazken 3 en
optimize hali ile uygulama kodunu duzenler.
M.Ali VARDAR

ali@linuxprogramlama.com

Bu yazınınson şekliniwww.linuxprogramlama.com adresinden temin edebilirsiniz.
Yasal Açıklama:
Bu belgenin, [GCC Kullanımı]1.0 sürümünün telif hakkı© 2005 M. Ali Vardar'a aittir. Bu belgeyi,
Free Software Foundation tarafından yayınlanmışbulunan GNU Özgür Belgeleme Lisansının1.1
ya da daha sonraki sürümünün koşullarınabağlıkalarak kopyalayabilir, dağıtabilir ve/veya
değiştirebilirsiniz. Bu Lisansınbir kopyasınıhttp://www.gnu.org/copyleft/fdl.html adresinde
bulabilirsiniz.
BU BELGE "ÜCRETSİZ"OLARAK RUHSATLANDIĞI İÇİN,İÇERDİĞİBİLGİLERİÇİN
İLGİLİKANUNLARIN İZİNVERDİĞİÖLÇÜDE HERHANGİBİRGARANTİ
VERİLMEMEKTEDİR.AKSİYAZILI OLARAK BELİRTİLMEDİĞİMÜDDETÇE TELİF
HAKKI SAHİPLERİVE/VEYA BAŞKA ŞAHISLAR BELGEYİ"OLDUĞU GİBİ",AŞİKAR
VEYA ZIMNEN, SATILABİLİRLİĞİVEYA HERHANGİBİRAMACA UYGUNLUĞU DA
M.Ali VARDAR 2003-2005 – GCC Kullanımı
DAHİLOLMAK ÜZERE HİÇBİRGARANTİVERMEKSİZİNDAĞITMAKTADIRLAR.
BİLGİNİNKALİTESİİLEİLGİLİTÜM SORUNLAR SİZEAİTTİR.HERHANGİBİR
HATALI BİLGİDENDOLAYI DOĞABİLECEK OLAN BÜTÜN SERVİS, TAMİRVEYA
DÜZELTME MASRAFLARI SİZEAİTTİR.İLGİLİKANUNUN İCBAR ETTİĞİ
DURUMLAR VEYA YAZILI ANLAŞMA HARİCİNDEHERHANGİBİRŞEKİLDE TELİF
HAKKI SAHİBİVEYA YUKARIDA İZİNVERİLDİĞİŞEKİLDE BELGEYİDEĞİŞTİREN
VEYA YENİDEN DAĞITAN HERHANGİBİRKİŞİ,BİLGİNİNKULLANIMI VEYA
KULLANILAMAMASI (VEYA VERİKAYBI OLUŞMASI, VERİNİNYANLIŞ HALE
GELMESİ,SİZİNVEYA ÜÇÜNCÜ ŞAHISLARIN ZARARA UĞRAMASI VEYA
BİLGİLERİNBAŞKA BİLGİLERLE UYUMSUZ OLMASI) YÜZÜNDEN OLUŞAN GENEL,
ÖZEL, DOĞRUDAN YA DA DOLAYLI HERHANGİBİRZARARDAN, BÖYLE BİR
TAZMİNAT TALEBİTELİFHAKKI SAHİBİVEYA İLGİLİKİŞİYEBİLDİRİLMİŞOLSA
DAHİ,SORUMLU DEĞİLDİR.
Tüm telif haklarıaksi özellikle belirtilmediği sürece sahibine aittir. Belge içinde geçen herhangi bir
terim, bir ticari isim ya da kuruma itibar kazandırma olarak algılanmamalıdır.Bir ürün ya da
markanınkullanılmışolmasıona onay verildiği anlamında görülmemelidir
Digg this story! Del.icio.us Share on Facebook! Technorati Reddit StumbleUpon

Forum / Destek

Hakkımızda

GPL Applications

Stats

Members
Stats
  • Total Posts: 114
  • Total Topics: 39
  • Online Today: 7
  • Online Ever: 31
  • (15 March, 2010, 09:08:04 pm)
Users Online
Users: 0
Guests: 7
Total: 7
 
TinyPortal v1.0 beta 4 © Bloc


Powered by MySQL Powered by PHP Powered by SMF 1.1.11 | SMF © 2006-2009, Simple Machines LLC Valid XHTML 1.0! Valid CSS!