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?
CEVAP
C programının derlenmesi üç adımdan oluşur:
Önişleme: basit bir C kaynak kodu dosyası alır ve
#include
s#define
s ve diğer ön işlemci direktifleri ile ilgilidir. Bu adım çıktı bir "saf" C dosyası olmadan ön-işlemci direktifleri.Derleme: derleyici ön-işlemci çıktısını alır ve bir nesne dosyası oluşturur.
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.
Nasıl derleme bağlama hatası günlük (F...
Nasıl Raylar Varlık Boru hattı derleme...
Nasıl PHP ve HTML/XML ayrıştırma işlem...
Veri bağlama Nasıl çalışır?AngularJS :...
Nasıl vim "sudo" hile çalışm...