C++ Plugins ABI-Probleme unter Linux

Ich arbeite an einem Plugin-System, um freigegebene Bibliotheken zu ersetzen.

Mir sind ABI-Probleme beim Entwerfen einer API für gemeinsam genutzte Bibliotheken bekannt, und Einstiegspunkte in den Bibliotheken, z. B. exportierte Klassen, sollten sorgfältig entworfen werden.

Das Hinzufügen, Entfernen oder Neuordnen privater Mitgliedsvariablen einer exportierten Klasse kann beispielsweise zu unterschiedlichen Speicherlayout-und Laufzeitfehlern führen (nach meinem Verständnis könnte das Pimpl-Muster daher nützlich sein). Natürlich gibt es viele andere Fallstricke, die beim Ändern exportierter Klassen zu vermeiden sind.

Ich habe hier ein kleines Beispiel erstellt, um meine Frage zu veranschaulichen.

Zuerst stelle ich dem Plugin-Entwickler den folgenden Header zur Verfügung :

Dann wird das Plugin als gemeinsame lib "libcharacter.so " erstellt" :

Und schließlich die Hauptanwendung, die das Plugin verwendet :

Reicht es aus, eine abstrakte Klasse zu definieren, um alle ABI-Probleme zu beseitigen?

+1
2019-09-17 15:19:40
Quelle
0 Antworten

Sehen Sie sich andere Fragen zu Tags an