Derleyici, bağlayıcı, yükleyici nedir?


Yanıtlar:


186
=====> COMPILATION PROCESS <======

                     |
                     |---->  Input is Source file(.c)
                     |
                     V
            +=================+
            |                 |
            | C Preprocessor  |
            |                 |
            +=================+
                     |
                     | ---> Pure C file ( comd:cc -E <file.name> )
                     |
                     V
            +=================+
            |                 |
            | Lexical Analyzer|
            |                 |
            +-----------------+
            |                 |
            | Syntax Analyzer |
            |                 |
            +-----------------+
            |                 |
            | Semantic Analyze|
            |                 |
            +-----------------+
            |                 |
            | Pre Optimization|
            |                 |
            +-----------------+
            |                 |
            | Code generation |
            |                 |
            +-----------------+
            |                 |
            | Post Optimize   |
            |                 |
            +=================+
                     |
                     |--->  Assembly code (comd: cc -S <file.name> )
                     |
                     V
            +=================+
            |                 |
            |   Assembler     |
            |                 |
            +=================+
                     |
                     |--->  Object file (.obj) (comd: cc -c <file.name>)
                     |
                     V
            +=================+
            |     Linker      |
            |      and        |
            |     loader      |
            +=================+
                     |
                     |--->  Executable (.Exe/a.out) (com:cc <file.name> ) 
                     |
                     V
            Executable file(a.out)

C ön işlemcisi: -

C ön işleme, derlemenin ilk adımıdır. Şunları ele alır:

  1. #define ifadeler.
  2. #include ifadeler.
  3. Koşullu ifadeler.
  4. Makrolar

Ünitenin amacı, C kaynak dosyasını Pure C kod dosyasına dönüştürmektir.

C derlemesi:

Ünitede altı adım vardır:

1) Sözcük Analizörü:

Bir "TOKEN" oluşturmak için kaynak dosyadaki karakterleri birleştirir. Bir simge, "boşluk", "sekme" ve "yeni satır" içermeyen bir karakter kümesidir. Bu nedenle bu derleme birimi "TOKENIZER" olarak da adlandırılır. Ayrıca yorumları kaldırır, sembol tablosu ve yer değiştirme tablosu girişleri oluşturur.

2) Sözdizimsel Çözümleyici:

Bu birim, koddaki sözdizimini kontrol eder. Örneğin:

{
    int a;
    int b;
    int c;
    int d;

    d = a + b - c *   ;
}

Yukarıdaki kod, denklem dengeli olmadığı için ayrıştırma hatası oluşturacaktır. Bu birim, aşağıdaki gibi ayrıştırıcı ağacını oluşturarak bunu dahili olarak kontrol eder:

                            =
                          /   \
                        d       -
                              /     \
                            +           *
                          /   \       /   \
                        a       b   c       ?

Bu nedenle bu birime PARSER de denir.

3) Anlamsal Analiz:

Bu birim ifadelerdeki anlamı kontrol eder. Örneğin:

{
    int i;
    int *p;

    p = i;
    -----
    -----
    -----
}

Yukarıdaki kod, "Uyumsuz tip ataması" hatasını oluşturur.

4) Ön Optimizasyon:

Bu birim CPU'dan bağımsızdır, yani iki tür optimizasyon vardır

  1. Ön optimizasyon (CPU bağımsız)
  2. Postoptimization (CPU'ya bağlı)

Bu birim, kodu aşağıdaki biçimlerde optimize eder:

  • I) Ölü kodun ortadan kaldırılması
  • II) Alt kod eleme
  • III) Döngü optimizasyonu

I) Ölü kodun ortadan kaldırılması:

Örneğin:

{
    int a = 10;
    if ( a > 5 ) {
        /*
        ...
        */
    } else {
       /*
       ...
       */
    }
}

Burada derleyici, derleme zamanında 'a'nın değerini bilir, bu nedenle if koşulunun her zaman doğru olduğunu da bilir. Dolayısıyla koddaki diğer kısmı ortadan kaldırır.

II) Alt kod eleme:

Örneğin:

{
    int a, b, c;
    int x, y;

    /*
    ...
    */

    x = a + b;
    y = a + b + c;

    /*
    ...
    */
}

aşağıdaki gibi optimize edilebilir:

{
    int a, b, c;
    int x, y;

    /*
     ...
    */

    x = a + b;
    y = x + c;      // a + b is replaced by x

    /*
     ...
    */
}

III) Döngü optimizasyonu:

Örneğin:

{
    int a;
    for (i = 0; i < 1000; i++ ) {

    /*
     ...
    */

    a = 10;

    /*
     ...
    */
    }
}

Yukarıdaki kodda, eğer 'a' yerelse ve döngüde kullanılmıyorsa, aşağıdaki gibi optimize edilebilir:

{
    int a;
    a = 10;
    for (i = 0; i < 1000; i++ ) {
        /*
        ...
        */
    }
}

5) Kod oluşturma:

Burada derleyici, daha sık kullanılan değişkenlerin kayıtlarda saklanması için montaj kodunu oluşturur.

6) Optimizasyon Sonrası:

Burada optimizasyon CPU'ya bağlıdır. Diyelim ki kodda birden fazla atlama varsa, bunlar aşağıdaki gibi birine dönüştürülür:

            -----
        jmp:<addr1>
<addr1> jmp:<addr2>
            -----
            -----

Kontrol doğrudan atlar.

Daha sonra son aşama Bağlama'dır (çalıştırılabilir veya kitaplık oluşturur). Yürütülebilir dosya çalıştırıldığında, ihtiyaç duyduğu kitaplıklar Yüklenir.


6
Neden henüz kimsenin işaret etmediğinden emin değilim, ancak bağlayıcı ve yükleyici aynı adımda değil. Bağlama, derlemenin bir parçasıdır, yükleme ise bir programı çalıştırmadan (önceki) bir parçadır.
SimpleGuy

7) Assembler ve en önemlisi 8) Linker ve 9) Loader nerede soruldu?

131
  • Bir derleyici kodu okur, analiz eder ve bir nesne dosyasına veya bir hata mesajları listesine çevirir.
  • Bir bağlayıcı, bir veya daha fazla nesne dosyasını ve olası bazı kitaplık kodunu bir çalıştırılabilir dosya, bir kitaplık veya bir hata mesajları listesi halinde birleştirir.
  • Bir yükleyici çalıştırılabilir kodu belleğe okur, bazı adres çevirileri yapar ve programı çalıştırmaya çalışarak çalışan bir programa veya bir hata mesajına (veya her ikisine) neden olur.

ASCII gösterimi:

[Source Code] ---> Compiler ---> [Object code] --*
                                                 |
[Source Code] ---> Compiler ---> [Object code] --*--> Linker --> [Executable] ---> Loader 
                                                 |                                    |
[Source Code] ---> Compiler ---> [Object code] --*                                    |
                                                 |                                    |
                                 [Library file]--*                                    V
                                                                       [Running Executable in Memory]

2
bu açıklama basittir. Öğretim görevlisi olmayı düşünmelisiniz. Teşekkürler
0.sh

Bağlayıcı ve yükleyici hakkında cevap vermekten kaçınmadığınız için teşekkür ederiz!

29

Umarım bu size biraz daha yardımcı olur.

İlk önce şu diyagramı gözden geçirin:

                         (img source->internet)

kaynak-> internet

Bir kod parçası yaparsınız ve dosyayı kaydedersiniz (Kaynak kodu), sonra

Ön işleme : - Adından da anlaşılacağı gibi, derlemenin bir parçası değildir. Derleyiciye gerçek derlemeden önce gerekli ön işlemi yapmasını söylerler. Bu aşamaya Metin Değiştirme adını verebilir veya # ile gösterilen özel önişlemci yönergelerini yorumlayabilirsiniz.

Derleme : - Derleme, bir dilde yazılmış bir programın hedeflenen başka bir dile çevrildiği bir süreçtir. Bazı hatalar varsa, derleyici bunları tespit edecek ve rapor edecektir.

Birleştir : - Birleştirme kodu makine koduna çevrilir. Assembler'a özel bir complier türü diyebilirsiniz.

Bağlama : - Bu kod parçasının bağlanması için başka bir kaynak dosyası gerekiyorsa, bağlayıcı bunları çalıştırılabilir bir dosya yapmak için bağlar.

Ondan sonra gerçekleşen birçok süreç var. Evet, tahmin ettiniz, tam da burada yükleyicinin rolü geliyor:

Yükleyici : - Yürütülebilir kodu belleğe yükler; program ve veri yığını oluşturulur, kayıt başlatılır.

Küçük Ekstra bilgi: - http://www.geeksforgeeks.org/memory-layout-of-c-program/ , orada bellek düzenini görebilirsiniz.


15

Derleyici: Üst düzey bir dil programını bir makine dili programına çeviren bir programdır. Derleyici, derleyiciden daha akıllıdır. Her türlü limiti, aralığı, hatayı vb. Kontrol eder. Ancak program çalışma süresi daha fazladır ve belleğin daha büyük bir bölümünü kaplar. Yavaş hıza sahiptir. Çünkü bir derleyici tüm program boyunca ilerler ve daha sonra tüm programı makine kodlarına çevirir. Bir derleyici bilgisayarda çalışır ve aynı bilgisayar için makine kodlarını üretirse, o zaman kendi kendine derleyici veya yerleşik derleyici olarak bilinir. Öte yandan, bir derleyici bir bilgisayarda çalışıyorsa ve başka bir bilgisayar için makine kodlarını üretiyorsa, o zaman bir çapraz derleyici olarak bilinir.

Bağlayıcı: Yüksek seviyeli dillerde, bazı yerleşik başlık dosyaları veya kitaplıklar saklanır. Bu kitaplıklar önceden tanımlanmıştır ve bunlar, programı yürütmek için gerekli olan temel işlevleri içerir. Bu işlevler, Linker adlı bir program tarafından kitaplıklara bağlanır. Bağlayıcı bir işlev kitaplığı bulamazsa, derleyiciye bilgi verir ve ardından derleyici bir hata oluşturur. Derleyici, bir programı derlemenin son adımı olarak bağlayıcıyı otomatik olarak çağırır. Kitaplıklarda yerleşik değildir, ayrıca kullanıcı tanımlı işlevleri kullanıcı tanımlı kitaplıklara bağlar. Genellikle daha uzun bir program, modüller adı verilen daha küçük alt programlara bölünür. Programı yürütmek için bu modüller birleştirilmelidir. Modülleri birleştirme işlemi bağlayıcı tarafından yapılır.

Yükleyici: Yükleyici, bir programın makine kodlarını sistem belleğine yükleyen bir programdır. Hesaplamada, bir yükleyici, bir İşletim Sisteminin programları yüklemekten sorumlu olan parçasıdır. Bir programı başlatma sürecindeki temel aşamalardan biridir. Çünkü programları hafızaya alır ve çalıştırmaya hazırlar. Bir programın yüklenmesi, yürütülebilir dosyanın içeriğini belleğe okumayı içerir. Yükleme tamamlandığında, işletim sistemi kontrolü yüklenen program koduna geçirerek programı başlatır. Program yüklemeyi destekleyen tüm işletim sistemlerinde yükleyiciler bulunur. Birçok işletim sisteminde, yükleyici kalıcı olarak bellekte yerleşiktir.


14

Wikipedia'nın iyi bir cevabı olmalı, işte düşüncelerim:

  • Derleyici: something.c kaynağını okur, bir şeyler yazar. O nesnesi.
  • Bağlayıcı: birkaç * .o dosyasını çalıştırılabilir bir programda birleştirir.
  • Yükleyici: Bir yürütülebilir dosyayı belleğe yükleyen ve çalıştırmaya başlayan kod.

4

*

Linux / unix tabanlı sistemlerle ilgili olarak açıklansa da, diğer tüm bilgisayar sistemleri için temel bir kavramdır.

*

LinuxJournal'dan Bağlayıcılar ve Yükleyiciler bu kavramı açıklıkla açıklıyor. Ayrıca a.out'un klasik adının nasıl ortaya çıktığını da açıklıyor. (montajcı çıkışı)

Hızlı bir özet,

c program --> [compiler] --> objectFile --> [linker] --> executable file (say, a.out)

çalıştırılabilir dosyayı aldık, şimdi bu dosyayı arkadaşınıza veya bu yazılıma ihtiyacı olan müşterinize verin :)

Bu yazılımı çalıştırdıklarında, bunu komut satırına yazarak söyleyin ./a.out

execute in command line ./a.out --> [Loader] --> [execve] --> program is loaded in memory

Program hafızaya yüklendikten sonra, PC'nin (program sayacı) ilk talimatını işaret ederek kontrol bu programa aktarılır. a.out


4

Derleyici:

.C veya .cpp vb. Türünde kaynak dosyayı okuyacak ve bunu nesne dosyası olarak adlandırılan .o dosyasına çevirecektir.

Bağlayıcı:

Birden çok kaynak dosyası için oluşturulabilen birkaç .o dosyasını çalıştırılabilir bir dosyada (GCC'de ELF biçimi) birleştirir. İki tür bağlantı vardır:

  • statik bağlantı
  • dinamik bağlama

Yükleyici:

Çalıştırılabilir dosyayı makinenin birincil belleğine yükleyen bir program.


Linux'ta program yürütmenin bu üç aşaması hakkında ayrıntılı bir çalışma için lütfen bunu okuyun .


1

derleyici değişiklikleri, kaynak kodunuzdaki hataları kontrol eder ve onu nesne koduna dönüştürür. bu, işletim sisteminin çalıştırdığı koddur.

Genellikle tüm programı tek bir dosyaya yazmazsınız, bu nedenle linker tüm nesne kod dosyalarınızı bağlar.

ana bellekte olmadığı sürece programınız çalıştırılmayacak


1
  • Derleyici : İnsanın anlaşılır biçimini makinenin anlayabileceği biçime dönüştüren
  • Bağlayıcı : Makinenin anlaşılır biçimini İşletim sisteminin anlaşılır biçimine dönüştüren
  • Yükleyici : programı gerçekten RAM'e yükleyen ve çalıştıran varlıktır

Linker & Interpreter, karşılıklı olarak münhasır olan yorumlayıcıdır ve satır satır kod alır ve satır satır çalıştırır.


1
  • Derleyici: Bilgisayarın bütünüyle işleyebileceği bir program üretmek için eksiksiz bir programı makine diline dönüştüren bir dil çevirmeni.
  • Bağlayıcı: Bir veya daha fazla derlenmiş nesne dosyasını alan ve bunları çalıştırılabilir bir dosyada veya başka bir nesne dosyasında birleştiren yardımcı program.
  • Yükleyici: çalıştırılabilir kodu belleğe yükler, programı ve veri yığınını oluşturur, kayıtları başlatır ve kodu çalıştırmaya başlar.

1

Derleyici Kaynak kodunu nesne koduna dönüştürür.

Bağlayıcı Çoklu nesne dosyalarını tek bir yürütülebilir program dosyasında birleştirir.

Loader Yürütülebilir dosyayı ana belleğe yükler.


1
Sanırım cevabınız, son 10 yıldaki mevcut 14 yüksek kaliteli cevapta büyük ölçüde kapsanmıştır.
Nicolas Gervais

0

Derleyici, belirli bir programlama dilinde yazılmış ifadeleri işleyen ve bunları bir bilgisayar işlemcisinin kullandığı makine diline veya "koda" dönüştüren özel bir programdır.


0

Derleyici , kod satırlarını programlama dilinden makine diline çevirir.

Bağlayıcı , iki program arasında bir bağlantı oluşturur.

Yükleyici , programı ana veri tabanındaki, programdaki vb. Belleğe yükler.


-1

Derleyici: Programların, nesne dosyalarının, mesajların vb. Hatalarını düzelten bir sistem yazılımıdır.

Linker: Bir veya daha fazla nesne dosyasını ve olası bazı kütüphane kodunu, bazı açıklanabilir bazı kitaplıklarda veya bir hata listesinde birleştiren bir sistem yazılımıdır.

Yükleyici: Çalıştırılabilir dosyayı makinenin birincil belleğine yükleyen bir program

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.