Linker
- C++ kursu
- Uzman
- Ders 40/47
- 5 dk
Linker ve bağlama sürecini öğrenirsin.
Linker
Linker (bağlayıcı), derlenmiş nesne dosyalarını (.o) birleştirip çalıştırılabilir dosya üreten araçtır. Her nesne dosyası bir sembol tablosu taşır; bu tablo tanımlanan ve başvurulan sembolleri listeler.
Linker'ın görevi: her başvurulan sembolün bir tanımını bulmaktır. Tanım başka bir dosyadaysa, linker oradan alır ve başvuruyu gerçek adrese yönlendirir. Tanım bulunamazsa undefined reference hatası verir. Bu yüzden büyük projeler birden çok .cpp dosyasına bölünür; her biri ayrı derlenip birlikte bağlanır.
Sembol çözümü
Bir .cpp dosyası compute fonksiyonunu çağırıyorsa ama tanımı yoksa, nesne dosyasında compute için bir undefined reference işareti kalır. Linker, diğer .o dosyalarında compute'un tanımını arar.
Tanım bulunursa linker başvuruyu gerçek adrese yönlendirir. Bulunamazsa undefined reference to compute hatası verir. Bu yüzden ileri bildirim (int compute(int);) header dosyasında olmalı; tanım .cpp dosyasında olmalı. Her dosya derlenirken tanım görmez ama linker çözüm yapar.
Uygulama compute fonksiyonu yaz
int compute(int x) yaz; gövdesi return x * 2;. main içinde std::cout << compute(5); yaz.
Başlangıç kodu
#include <iostream>
// compute fonksiyonunu burada tanımla
int main() {
// compute'u çağır ve yazdır
return 0;
}Örnek çözüm
#include <iostream>
int compute(int x) {
return x * 2;
}
int main() {
std::cout << compute(5);
return 0;
}Beklenen çıktı
10
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Linker ne yapar?
g++ main.o utils.o -o program- Kaynak kodu derler
- İşletim sistemini başlatır
- Çöp toplar
- Nesne dosyalarını birleştirir ve sembolleri çözer Doğru cevap
Açıklama: Linker, .o dosyalarını birleştirip çalıştırılabilir üretir.
2 İleri bildirimi tamamla
int compute(int ____); // forward declaration
int compute(int x); // forward declaration
Açıklama: int compute(int x); ileri bildirimdir.
3 Kavramı rolüne eşle
| Kavram | Anlamı |
|---|---|
undefined reference |
Bağlama hatası |
object file (.o) |
Sembol tablosu |
symbol table |
Sembol adresleri |
linker |
Nesneleri birleştirir |