Linker Nedir?
Bir *Linker Error* aldığınızda, C++ derleyicisi kodu derlemiştir ancak bağlamada (linking) bir sorunla karşılaşmıştır. Bu sorun genellikle eksik dosyalar, tanımlanmamış işlevler ya da yanlış ayarlamalar yüzünden ortaya çıkar.
Linker Error Türleri
1. Undefined reference to 'function_name'
Bu hata genellikle bir işlevin tanımlanmadığını gösterir. Eğer bir işlevi çağırıp onu henüz tanımlamadıysanız, linker bu işlevi bulamayıp size bu hatayı verecektir.
kopyala// Hatalı örnek int main() { myFunction(); // Bu işlev tanımlanmadı return 0; } // myFunction() işlevinin tanımı eksik.
2. Multiple definitions of 'variable_name'
Eğer aynı değişkeni veya fonksiyonu birden fazla yerde tanımladıysanız, linker bunu iki kez gördüğünde hata verir.
kopyala// Hatalı örnek int number = 10; // Bu değişken birden fazla dosyada tanımlandıysa hata verebilir.
3. Cannot find -l
Eğer bir kütüphane kullanıyorsanız ve linker bu kütüphaneyi bulamıyorsa, bu hatayı alırsınız. Kütüphane dosyasının yolunu belirtmeyi unutmuş olabilirsiniz.
kopyalag++ program.cpp -o program -lmissingLibrary // Burada kütüphane eksik
Linker Error’ları Çözme Yöntemleri
1. Eksik Dosya ve Fonksiyonları Kontrol Etme
Eğer bir işlev veya değişkeni başlık dosyasına (header) tanımladıysanız, bunun doğru bir şekilde implementasyon dosyanızda tanımlanıp tanımlanmadığını kontrol edin. Çoğu zaman, fonksiyonların deklarasyonları bulunur, ancak implementasyonları eksik olabilir.
2. Bağlantı Yollarını Kontrol Etme
Kullandığınız dış kütüphanelerin doğru şekilde bağlandığından emin olun. Linker, bağlı kütüphanelerin doğru yerde bulunmadığı durumlarda hata verir. Kütüphaneleri doğru şekilde belirttiğinizden emin olun.
3. Çift Tanımlamaları Engelleme
Çift tanımlamadan kaçınmak için değişkenler veya fonksiyonlar yalnızca bir kez tanımlanmalıdır. Global değişkenleri yalnızca bir .cpp dosyasında tanımlayıp, diğer dosyalarda `extern` anahtar kelimesi ile kullanmalısınız.
kopyala// global.h extern int globalVar; // main.cpp #include "global.h" int globalVar = 10; // Tanımlama burada