Şimdi Ara

Linux Altında C Derleyici

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
1 Misafir - 1 Masaüstü
5 sn
6
Cevap
1
Favori
1.577
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Linux Altında C Derleyici

    Linux altında program yazabilmek için elinizin altında bir tane text editör olmalıdır. Bu editorde yazdığınız programı, o program hangi uzantıyı gerektiriyorsa o uzantılı olacak şekilde kaydedip kullanabilirsiniz. Örneğin ben C programlama dili için Kwrite kullanıyorum. (MDK 10.1 KDE kullanıyorum) Kwrite 'ta yazdığım kodu Dosya->Farkli Kaydet 'ten deneme.c şeklinde kaydediyorum. Bundan sonra yapılması gereken tek şey bu dosyayı bir C derleyici ile derlemek. Linux altında c programları cc (C Complier) yada gcc (GNU C Complier) ile derlenebilir. GNU C Complier'ıhttp://gcc.gnu.org/ adresinden temin edebilirsiniz.

    GCC 'nin Kullanımı

    Linux altında herhangi bir editörle yazdığınıız programınızı diyelimki deneme.c şeklinde /home/kullanci_adiniz/deneme/ dizini altında kaydettiniz. Yazdığımız programda misal şöyle olsun
    quote:


    #include <stdio.h>

    main ()
    {
    int a;
    char ch;

    a=100;
    ch='A';
    printf("a= %d ch = %c\n",a,ch);
    }

    şimdi konsoldan o dizinin olduğu yere gidelim
    quote:


    # cd /home/kullanci_adiniz/deneme/

    şimdi de o dizin içindeki deneme.c yi derleyelim
    quote:


    # gcc -o deneme deneme.c

    bu komut satırından sonra hiçbir hata almadıysak, deneme dizini altına baktığımızda ikinci bir deneme isimli, uzantısı olmayan bir dosya görmüş oluruz. bu dosya linux altında çalıştırılabilir bir dosyadır. Az önce yazdığımız komut satırına tekrardan dönelim. şimdi orada "gcc -o deneme deneme.c" diyerek gcc yi çağırdık ve derleme sonrasında oluşacak çıktı dosyasının adınıda -o parametresi ile belirledik. Eğer sadece
    quote:


    # gcc deneme.c

    diye yazmış olsaydık deneme.c dosyası gene derlenmiş olacaktı. ancak az önce elde ettiğimiz çalıştırabilir deneme dosyasının adını linux kendine göre belirleyecekti. Peki gelelim şimdi programımızı nasıl çalıştıracağımıza, çünkü program ekrana birşeyler yazdırıyordu dimi ?
    quote:


    # ./deneme

    yazmamız yeterli olacaktır. linux altında tüm çalıştıralabilir dosyaları konsoldan ./dosya_adi şeklinde çalıştırabiliriz. Tabi bunu yazınca biz konsoldaki kara ekranda
    a= 100 ch = A
    yazsını görmüş olduk :)

    Peki Derleme Sırasında Hata olursa ?

    Evet derleme sırasında hata olabilir. Diyemlimki programı yazarken bir yerde ";" kullanmayı unuttuk. misal program şöyle olsun.
    quote:


    #include <stdio.h>

    main ()
    {
    int a;
    char ch /* noktali virgul kullanmadan yazmisin hay aksi :p */

    a=100;
    ch='A';
    printf("a= %d ch = %c\n",a,ch);
    }

    sonra az önce anlattığım gibi deneme.c yi derlemeye kalktık "# gcc -o deneme deneme.c " fakat o ne alt satıra geçeceğimize konsolda kara ekranda bir sürü şeyler yazıyor:

    deneme.c: In function `main':
    deneme.c:8: error: syntax error before "a"
    deneme.c:9: error: `ch' undeclared (first use in this function)
    deneme.c:9: error: (Each undeclared identifier is reported only once
    deneme.c:9: error: for each function it appears in.)

    burada bize hatanın nereden kaynaklandığı anlatılmaktadır. main fonksiyonu içinde ch bildiriminin yapılmadığını söylemektedir. Hemen editörümüz ile deneme.c yi açarsak ch olduğu satıra gittiğimizde ";" unuttuğumuzu görebilir hatayı düzeltip kaydettikten sonra tekrar derleyebiliriz.

    Matematiksel Fonksiyonlar Nasıl Derlenir ?

    Diyelimlki programımız şöyle olsun

    quote:


    #include <stdio.h>
    #include <math.h>

    main ()
    {
    int a,b;
    char ch;

    a=100;
    b=sqrt(a);
    ch='A';
    printf("a= %d ch = %c b = %d\n",a,ch,b);
    }


    bu programı
    quote:


    # gcc -o deneme deneme.c

    şeklinde derlemeye kalkarsak aşağıdaki gibi bir hata yeriz:

    /home/kullanici_adiniz/tmp/ccEhkAmZ.o(.text+0x31): In function `main':
    : undefined reference to `sqrt'
    collect2: ld returned 1 exit status

    bu hatadan kurtulmak için derleme sırasında "-lm" parametresini kullanmamız gerekmektedir. -lm derleme sırasında matematiksel kütüphaneleri koda eklemektedir. yani komut satırı şu şekilde olacak
    quote:


    # gcc -lm -o deneme deneme.c

    Benimde yazıyı yazarken dikkatimi çekti yazdığımız programdan "#include <math.h>" kaldırsak bile yukarıdaki gibi derlersek programımız çalışıyor. çünkü -lm ile derleme sırasında koda libm.so 'yu eklemiş olduk.

    Eğer yazdığımız koda eklenecek olan kitaplıklar ve kütüphaneler sistemde standart olan yerlerde mevcut değilse ne olacak ?

    Evet mesela diyelim ki /usr/library diye bir dizinimiz olsun. Burada bizim işimize yarayan kütüphaneler olsun. kaynak kodumuzda buradaki kütüphanalerden birini çağıralım , misal kaynak kodumuz şöyle olsun

    quote:


    #include <stdio.h>
    #include <topla.h> /* /usr/library dizininde olan bize ait özel bir dosya olsun tabi sadece bir örnek */
    main ()
    {
    int a,b,c;
    char ch;

    a=100;
    b=20;
    c=topla(a,b);
    ch='A';
    printf("a= %d ch = %c c = %d\n",a,ch,c);
    }



    şimdi bu program nasıl derlenecek? işte böyle ..

    quote:


    # gcc -o deneme deneme.c -I/usr/library -Itopla

    böylelikle derleyiciye topla.h 'ı /usr/library dizinin içinde aramasını söyledik. eğer böyle farklı dizinlerde farklı dosyaları eklemek zorunda kalırsanız her bir dosya için -I dizin1 -I dizin2 -Idosya_adi -Idosya_adi2 şeklinde gcc komut satırına eklemelisiniz.

    Evet şimdilik bu kadar eğer yanlış varsa arkadaşlar düzeltsin.

    Buarada birşey daha demek istiyorum. GCC ile extradan şeyler bilen arkadaşlar varsa onlarda bu yazı altına bildiklerini lütfen eklesin. Baya bir kişinin işine yaracak bir yazı olacaktır eminin....



    < Bu mesaj bu kişi tarafından değiştirildi mythief -- 24 Kasım 2004, 10:21:06 >







  • eline sağlık bişeyler yapmışsında hangi akla hizmet yaptığını anlayamadım yani böyle bi konu mu vardı hocam, biri anlatmanızı mı istedi? istek kabul ediyorsanız sonraki konunuzda çekirdek derlemeyi anlatınız, yada ne biliyim ... aklına ne gelirse ;-)

  • Sağol. Tam böyle bir şeye ihtiyacım vardı. Ne zaman neyin lazım olacağını kimse bilemez.
  • quote:

    Orjinalden alıntı: kibarfeyzo

    eline sağlık bişeyler yapmışsında hangi akla hizmet yaptığını anlayamadım yani böyle bi konu mu vardı hocam, biri anlatmanızı mı istedi? istek kabul ediyorsanız sonraki konunuzda çekirdek derlemeyi anlatınız, yada ne biliyim ... aklına ne gelirse ;-)




    amac burda bilgi paylasimi bildigin birsey varsa sende yaz illa birisinin soru sormasina gerek yok. Mythief guzel yazmis

    http://www.eps.surrey.ac.uk/SCS/guides/unixguides.html

    burda da cok guzel bir kaynak var daha detayli bilmek isteyenler veya yeni baslayanlar icin ama ingilizce lazim

    bu arada merhaba mythief !!!




  • quote:

    Orjinalden alıntı: tekbuz

    quote:

    Orjinalden alıntı: kibarfeyzo

    eline sağlık bişeyler yapmışsında hangi akla hizmet yaptığını anlayamadım yani böyle bi konu mu vardı hocam, biri anlatmanızı mı istedi? istek kabul ediyorsanız sonraki konunuzda çekirdek derlemeyi anlatınız, yada ne biliyim ... aklına ne gelirse ;-)




    amac burda bilgi paylasimi bildigin birsey varsa sende yaz illa birisinin soru sormasina gerek yok. Mythief guzel yazmis

    http://www.eps.surrey.ac.uk/SCS/guides/unixguides.html

    burda da cok guzel bir kaynak var daha detayli bilmek isteyenler veya yeni baslayanlar icin ama ingilizce lazim

    bu arada merhaba mythief !!!


    selam tekbuz nasılsın foruma dönmüşün bakıyorum. bende yeni farkettim mesajını kusura bakma geçikmeli cevap veriyorum. hoşgeldin :) proje falan vardı sanırım öyle değil mi ondan girmiyordun nete pek?




  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.