SORU
7 HAZİRAN 2011, Salı


Nasıl derleme bağlama işlemi çalışma yapıyor mu?

Bir süre C programlama yaptım ve derleyici ve bağlama işlemi aslında nasıl çalıştığını merak ettim?

Birisi lütfen açıklayabilir mi?

(Not: Bu Stack Overflow's C FAQ için bir giriş olarak tasarlanmıştır. Eğer bu formda bir SSS sağlama fikri tenkit etmek istiyorsanız, o zaman the posting on meta that started all this bunu yapmak için bir yer olurdu. Cevaplar soru izlenen C chatroom nereye SSS fikir başladı ilk başta, bu da senin cevabın çok muhtemel alın okuyun o kim buldu bu fikri.)

CEVAP
7 HAZİRAN 2011, Salı


C programının derlenmesi üç adımdan oluşur:

  1. Önişleme: basit bir C kaynak kodu dosyası alır ve #includes #defines ve diğer ön işlemci direktifleri ile ilgilidir. Bu adım çıktı bir "saf" C dosyası olmadan ön-işlemci direktifleri.

  2. Derleme: derleyici ön-işlemci çıktısını alır ve bir nesne dosyası oluşturur.

  3. Bağlama: linker nesne dosyaları derleyici tarafından üretilen alır ve bir kitaplıktan ya da çalıştırılabilir bir dosya oluşturur.

Önişleme

Bu kadar basit bu işlerön işlemci direktifleri, #include #define gibi. C , dikkatli kullanılması gerekir bu yüzden sözdizimi agnostik.

Bu eserler üzerinde bir C kaynak dosyası hiç bir zaman değiştirme #include direktiflerine içeriğinin ilgili dosyaları (genellikle sadece bildirimleri), yapmak yerine makrolar (#define) ve seçme farklı bölümlerini metin olarak #if, #ifdef #ifndef direktifler.

Bu kadar basit önişleme belirteçleri akışı üzerinde çalışır. Makro yerine diğer belirteçleri (## anlam iki belirteçleri birleştirme sağlar operatör) simgeleri değiştirme olarak tanımlanır.

Tüm bu olanlardan sonra, bu kadar basit belirteçleri dönüşümleri yukarıda açıklanan kaynaklanan bir akarsu tek bir çıkış üretir. Ayrıca her satırı bu mantıklı hata mesajları üretmek için kullanabilirsiniz, böylece nereden geldiğini derleyici anlatmak için bazı özel işaretleri ekler.

Bazı hatalar #if #error direktifleri akıllıca kullanımı ile, bu aşamada elde edilebilir.

Derleme

Derleme adım işleyişi her çıkış gerçekleştirilir. Derleyici saf C kaynak kodu (şimdi herhangi bir ön işlemci direktifleri olmadan) ayrıştırır ve bir nesne dosyası oluşturur. Bu nesne dosyası derlenmiş kod (ikili biçimde) simgeleri giriş tanımlı içerir. Nesne dosyaları semboller adıyla anılır.

Nesne dosyaları tanımlanmamış sembolleri bakın. Bu bir bildirim kullanın, ve bunun için bir tanım sağlamaz. Derleyici bu akıl almaz ve mutlu bir nesne dosyası kaynak kodu iyi biçimlendirilmiş olduğu sürece üretecek.

Derleyiciler genellikle bu noktada derleme duralım. Bu her kaynak kodu dosyası derlemek çünkü çok kullanışlı ayrı. Bu sağladığı avantaj yeniden derlemek için gerek yokher şeyieğer sadece tek bir dosyayı değiştirmek.

Üretilen nesne dosyalarını özel arşiv statik kütüphane olarak adlandırılan, daha kolay yeniden için daha sonra koyabilirsiniz.

"Normal" derleyici hataları, hata veya başarısız aşırı çözümleme hataları sözdizimi gibi, rapor edilmiştir. bu aşamada.

Bağlama

Linker derleyici üretilen nesne dosyalar son derleme çıktısı üretir. Bu çıkış, ya (veya) dinamik bir paylaşılan kütüphane (ve isim benzer olsa da, statik kitaplıkları daha önce de belirttiğimiz çok ortak noktası yok) ya da çalıştırılabilir bir dosya olabilir.

Doğru adreslerle tanımlanmamış semboller başvuruları değiştirerek tüm nesne dosyalarını bağlar. Bu semboller her kütüphanelerde diğer nesne dosyaları veya tanımlanabilir. Eğer kütüphaneleri standart kütüphane dışında tanımlanmışsa, onlar hakkında bağlayıcı söylemelisin.

Bu aşamada en yaygın hataları tanımlar eksik veya yinelenen tanımlar. Eski ya da tanımları yok (yani yazılı) veya nesne onlar için linker verilmedi bulunduğu dosyaları veya kitaplıkları anlamına gelir. İkincisi belli: aynı simge iki farklı nesne dosyaları veya kütüphanelerde tanımlanmıştır.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Canal de arkyoru

    Canal de ark

    18 Ocak 2007
  • David MeShow

    David MeShow

    10 EKİM 2006
  • Slave Boy Films - Fandom from a Galaxy Far Far Away

    Slave Boy Fi

    12 HAZİRAN 2009