CodeBlanks Logo Icon CodeBlanks

Linker

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

main.cpp
#include <iostream>

// compute fonksiyonunu burada tanımla

int main() {
    // compute'u çağır ve yazdır
    return 0;
}

Örnek çözüm

main.cpp
#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?

main.cpp
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

Soru
int compute(int ____);  // forward declaration
Cevap
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

Uzman bölümündeki tüm dersler