Bu videoda, linker hataları ve neden oluşabilecekleri hakkında konuşacağız.
Bağlayıcı hataları, bağlayıcı bir yürütülebilir dosya oluşturmak için bir programın tüm parçalarını bir araya getirmeye
çalıştığında ve bir veya daha fazla parça eksik olduğunda ortaya çıkar.
Bu durum genellikle bir nesne dosyası veya kütüphaneler bağlayıcı tarafından bulunamadığında ortaya çıkabilir.
Bağlayıcı hatalarını düzeltmek zor olabilir.
Bazen sadece yolların doğru olması önemlidir, böylece bağlayıcı eksik parçaların nerede
olduğunu bilir.
Şimdi code light'a geçelim ve bir programı linker hatası almaya zorlayalım, böylece hata mesajının neye benzediğini
görebilirsiniz.
Örnek kod burada, lütfen sözdizimini dikkate almayın.
Bu aslında C artı artı kodudur, ancak yine de bağlayıcı hatalarıyla ilgilidir.
İO akışı için endişelenme.
Stdcout için endişelenme.
Buradaki ana fikir, bağlantı hatalarının C ve C plus plus'ta aynı olduğudur.
Ve buradaki kodlama örneği sadece bir linker hatasını tekrar göstermeye çalışıyor.
Code Light'tayım ve kullandığımız şablona dayalı olarak Linker Error adında bir proje oluşturdum.
Yani elimde sadece bir Main var. Merhaba dünya yazan cpp dosyası.
Şimdi burada bir bağlayıcı hatasını zorlayacağız.
Bu normalde yapmak isteyeceğiniz bir şey değildir, ancak hatanın neye benzediğini göstermek için bunu yapmak istiyorum.
Yani extern int c diyeceğim ya da sadece X diyelim ve tüm bunları size birazdan
açıklayacağım.
Ve sonra ana gövdenin içinde, oradaki X işaretini kullanmaya çalışmak istiyorum.
Bu sadece bir tamsayı ve diyelim ki bunu yazdırmak istiyorum.
Sadece X çıktısı almak istiyorum, bu kadar basit.
Bunu saklayacağım.
Şimdi bu programı derlediğimde ne olacağını göreceksiniz.
Derlemeye sağ tıklayacağım.
Temiz bir derleme elde ediyorum.
Programda bir sorun yok, ancak programı oluşturup çalıştırmayı denediğimde.
Bağlayıcı hatasını görebilirsiniz.
Bu klasik bir bağlayıcı hatasıdır.
Bir şeye tanımlanmamış referans.
Bu durumda sadece x olur.
Ayrıca, bağlayıcının burada bir tane döndürdüğünü fark edeceksiniz.
LD, çıkış durumu olan bir değerini döndürür.
Yani bağlantıda bir sorun vardı.
Açıkçası derleyici iyiydi çünkü hiçbir derleyici hatası almadık.
Bunu tekrar yapacağız.
İşte derleme.
Hata yok, uyarı yok.
Şimdi size burada neler olduğunu açıklayayım.
Hemen kalemimi alayım.
Burada ana CPP dosyam var ve diyelim ki main dot zero ya da main dot object olarak
derlenecek.
Burada bir EXE'ye referansımız var.
Tam şurada görebilirsiniz.
Burada kullanacağım bir exe'ye referansım var.
Şimdi O stream kütüphanelerimiz de var, bu yüzden linker'ın bu kütüphaneleri alması gerekiyor ve ben buraya sadece i o stream yazacağım,
böylece neden bahsettiğimi anlayacaksınız.
Bağlayıcının ana exe'mi oluşturmak için bu ikisini bir araya getirmesi gerekiyor.
Ya da bu durumda bağlayıcı hatası exe olacağına inanıyorum.
Ama ne demek istediğimi biliyorsun.
Yani derlemede sorun yok.
Nesne dosyamızı oluşturduk.
Bu kütüphane var.
Sorun şu ki, burada derleyiciye bu x'in bende olmadığını söyledim.
Başka bir yerde.
Başka biri tarafından tanımlanır.
Belli ki başka biri tarafından tanımlanmamış, çünkü bu durum meseleyi zora sokuyor.
Şimdi bağlayıcının bu X değerini çözmesi gerekiyor. Diyor ki, tamam, yazdırmak için bu değeri nereden alabilirim?
Çünkü benden bunu yapmamı istedin, değil mi?
x değerini yazdırmasını istiyorum.
X nerede?
Bulamıyor.
Bu bağlayıcı hatası.
Olan şey tam olarak bu.
Hata mesajını bir kez daha görebilmeniz için bunu tekrar oluşturmama izin verin.
Yap ve çalıştır.
Ve işte hata mesajı.
X'e tanımlanmamış referans diyor.
Neler olup bittiğini tam olarak görebilirsiniz.
X'i bulamıyor.
Şimdi, bu bir derleyici hatası değildir.
Bu bir bağlayıcı hatasıdır.
Bunu anlamak gerçekten çok önemli.
Bağlayıcı hatalarını düzeltmek zordur.
Çoğu zaman bağlantı kurmanız gereken dosyalar eksiktir.
Yanlış yerdeler.
Bu kursta kod ışığı kullanarak bu konuda endişelenmenize gerek yok, temelde her şeyi kendimiz
yapacağız.
Ancak üçüncü tarafların kütüphanelerini kullanıyorsanız, bu daha orta veya ileri düzey bir kursta konuşacağımız
türden bir şeydir.
Ancak, bir hata ile karşılaşırsanız, foruma gönderin ve üzerinde birlikte çalışalım diye size bağlayıcı
hatalarını göstermek istedim.