ABI nedir?
- C++ kursu
- Uzman
- Ders 19/47
- 5 dk
ABI (Application Binary Interface) kavramını öğrenirsin.
ABI nedir?
ABI (Application Binary Interface, Uygulama İkili Arayüzü), derlenmiş nesne dosyalarının birbiriyle nasıl konuşacağını tanımlar. Kaynak kod sözdizimini değil, ikili uyumluluğu belirler: çağırma biçimi, yapı yerleşimi, isim mangling ve vtable.
İki derleyici aynı ABI'yi izlerse, biri derlenmiş kütüphane, diğeri ana program olabilir ve sorunsuz bağlanır. ABI farklıysa, kaynak kod aynı olsa bile sembol adları uyuşmaz ve bağlama hatası oluşur. Bu yüzden GCC ve Clang Itanium ABI'sini paylaşır; MSVC farklı bir ABI kullanır.
ABI bileşenleri
Dört temel ABI bileşeni şunlardır: çağırma biçimi (parametreler kayıtcı veya yığın üzerinden nasıl geçilir), yapı yerleşimi (üyeler bellekte nasıl sıralanır), name mangling (fonksiyon imzasının sembol adına kodlanması) ve vtable (sanal fonksiyon tablosu).
Bu dört öğeden biri değişirse ABI kırılır. Örneğin sınıfa yeni bir sanal fonksiyon eklersen vtable değişir, eski derlenmiş kod yanlış fonksiyonu çağırır. Bu yüzden kütüphane yazarları ABI'yi korumak için özenli olmalı.
Uygulama compute fonksiyonu yaz
int compute(int x) yaz; gövdesi return x * 3;. main içinde std::cout << compute(4); yaz.
Başlangıç kodu
#include <iostream>
// compute fonksiyonunu buraya tanımla
int main() {
// compute'u çağır ve yazdır
return 0;
}Örnek çözüm
#include <iostream>
int compute(int x) {
return x * 3;
}
int main() {
std::cout << compute(4);
return 0;
}Beklenen çıktı
12
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 ABI neyi tanımlar?
g++ -c lib.cpp
clang++ main.cpp lib.o- Yalnızca kaynak kod sözdizimini
- Derleyici sürüm numarasını
- Çalıştırılabilir dosyaların ikili uyumluluğunu Doğru cevap
- Sınıf adlandırma biçimini
Açıklama: ABI, çağırma biçimi, yerleşim ve mangling gibi ikili ayrıntıları tanımlar.
2 extern C bildirimini tamamla
extern "C" void ____();
extern "C" void greet();
Açıklama: greet fonksiyonu extern "C" ile manglesiz bildirilir.
3 Bileşeni rolüne eşle
| Kavram | Anlamı |
|---|---|
calling convention |
Parametre geçirme |
struct layout |
Üye sıralama |
name mangling |
Sembol adlandırma |
vtable |
Sanal fonksiyon tablosu |