0Pricing
C++ Academy · Lektion

API-Versionierung und ABI-Stabilität

Planen Sie semantische Versionierung und schützen Sie die ABI-Stabilität über mehrere Releases hinweg.

API-Versionierung und ABI-Stabilität ist eine kostenlose C++ Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des C++ Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der C++ Academy-Kurs umfasst insgesamt 4 Lektionen.

Zwei verschiedene Kompatibilitäten

Zwei wichtige Aspekte der Kompatibilität:

  • API-Kompatibilität — Quellcode, der gegen Version N kompiliert, kompiliert auch gegen N+1
  • ABI-Kompatibilität — Binärdateien, die gegen Version N kompiliert wurden, funktionieren mit N+1 ohne erneute Kompilierung

Warum ABI wichtig ist

ABI-Kompatibilität ermöglicht die Aktualisierung gemeinsam genutzter Bibliotheken, ohne abhängige Komponenten neu zu kompilieren. Das ist entscheidend für Distributionen, Plugins und langlebige Anwendungen.

Was die ABI zerstört

Viele harmlos wirkende Änderungen zerstören die ABI:

  • Datenmember hinzufügen, entfernen oder umordnen
  • Virtuelle Funktionen hinzufügen oder entfernen
  • Vererbung ändern
  • Template-Parameter ändern
  • Änderungen an Inline-Funktionen (manchmal)

Semantische Versionierung (SemVer)

Kommunizieren Sie Kompatibilität über Versionsnummern nach dem Schema MAJOR.MINOR.PATCH:

  • MAJOR — inkompatible Änderungen
  • MINOR — neue Funktionen, abwärtskompatibel
  • PATCH — Fehlerbehebungen

Versionierung in Headern

Stellen Sie Versionsmakros in Ihren Headern bereit.

#define MYLIB_VERSION_MAJOR 2
#define MYLIB_VERSION_MINOR 1
#define MYLIB_VERSION_PATCH 3

SONAME für gemeinsam genutzte Bibliotheken

Unter Linux besitzen gemeinsam genutzte Bibliotheken einen SONAME, der die Hauptversion codiert. Linker und Loader verwenden ihn, um kompatible Versionen zu finden.

# libmylib.so.2 -> libmylib.so.2.1.3
# SONAME = libmylib.so.2

Implementierungsdetails verbergen

Stabile ABIs erfordern, dass die Implementierung aus den Headern herausgehalten wird. Verwenden Sie PIMPL (in der nächsten Lektion), um private Member hinzuzufügen oder zu entfernen, ohne Consumer zu beeinträchtigen.

Compiler-ABI

Die C++-ABI unterscheidet sich zwischen Compilern (GCC und MSVC verwenden unterschiedliches Name Mangling und unterschiedliche Klassenlayouts). Verteilen Sie Binärdateien, die mit bestimmten Compilern erstellt wurden, oder beschränken Sie sich auf Schnittstellen mit extern "C".

ABI der Standardbibliothek

Funktionen kompatibel hinzufügen

Sichere Ergänzungen:

  • Neue freie Funktionen
  • Neue Klassen
  • Neue nicht virtuelle Memberfunktionen (mit Bedacht)

Unsicher: Klassen ändern, die Consumer auf dem Stack haben oder einkompiliert wurden.

Tools zur ABI-Prüfung

Tools zum Vergleichen zweier Builds:

  • abidiff — vergleicht die ABI
  • abicompliance-checker — erstellt Berichte

Langfristige Strategie

Entwerfen Sie von Anfang an auf Stabilität hin: kleine öffentliche API, opake Typen und ein überlegter Einsatz von Templates und Vererbung. Nach der Veröffentlichung ist ein ABI-Bruch teuer — planen Sie Erhöhungen der Hauptversion sorgfältig und kommunizieren Sie Änderungen klar.

Kurzer Test

Welche Änderung an einer C++-Klasse wird die ABI am wahrscheinlichsten brechen?

Zusammenfassung

API-Kompatibilität bedeutet Quellkompatibilität, ABI-Kompatibilität bedeutet Binärkompatibilität. Die ABI ist fragil — das Hinzufügen von Membern oder virtuellen Funktionen sowie Änderungen an der Vererbung brechen sie. Verwenden Sie SemVer, verbergen Sie die Implementierung mit PIMPL, liefern Sie mehrere Hauptversionen parallel aus und führen Sie ABI-Prüfungen durch.

Häufig gestellte Fragen

Ist die Lektion „API-Versionierung und ABI-Stabilität“ kostenlos?

Ja — der vollständige Text von „API-Versionierung und ABI-Stabilität“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des C++ Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der C++ Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „API-Versionierung und ABI-Stabilität“?

Planen Sie semantische Versionierung und schützen Sie die ABI-Stabilität über mehrere Releases hinweg. Du übst C++ Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um C++ Academy zu starten?

Keine Vorkenntnisse erforderlich. C++ Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.

Wie lange dauert die Lektion „API-Versionierung und ABI-Stabilität“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser C++ Academy-Lektion Code schreiben und ausführen?

Ja. Jede C++ Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Header-only- vs. kompilierte Bibliotheken
  2. API-Versionierung und ABI-Stabilität
  3. Implementierung mit PIMPL verbergen
  4. Eine moderne Header-only-Utility-Bibliothek schreiben
← Zurück zu C++ Academy