2 Stimmen

Klassen und Rekompilierung

Wenn sich eine Klassenschnittstelle nicht ändert, aber ihre Implementierung ändert sich, (und entsprechend die Bibliotheksdatei, die den Funktionscode der Klasse enthält) muss der Client-Code (Treiber-App) neu kompiliert werden?

Wenn die Treiberanwendung nach der erwähnten Änderung nicht neu kompiliert werden muss, wie würde die ausführbare Datei den neuen Speicherort der bearbeiteten Methode in der neuen Bibliothek (derjenigen mit der bearbeiteten Funktionalität der neuen Klasse) finden?

2voto

Jojje Punkte 382

Das ABI hängt sehr stark vom Compiler-Anbieter und der Version ab. Es könnte möglich sein, die Treiberanwendung nicht neu zu erstellen, aber man muss wirklich sehr vorsichtig sein. Definieren Sie Ihre Schnittstelle mit rein virtuellen Elementen/Funktionen und keinem Datenmaterial, vorzugsweise in einem separaten Include, das Sie überhaupt nicht berühren.

Die .dll- oder .so-Datei (oder Äquivalent) muss im geladenen Modul durch hartes Verschieben der Datei oder durch Änderung der Referenz ersetzt werden, wohin der dynamische Linker nach .dll/.so-Dateien suchen wird. Auf Unix/Linux wird normalerweise eine Umgebungsvariable mit dem Namen LD_LIBRARY_PATH verwendet.

1voto

Lightness Races in Orbit Punkte 367630

Wenn sich eine Klassenschnittstelle nicht ändert, aber ihre Implementierung geändert wird (und entsprechend die Bibliotheksdatei, die den Funktionscode der Klasse enthält), muss der Clientcode (Treiber-App) neu kompiliert werden?

Im Allgemeinen nicht. Wenn Sie die ABI nicht brechen, besteht kein Bedarf.

Wie würde die ausführbare Datei den neuen Speicherort der bearbeiteten Methode in der neuen Bibliothek finden

Auf die gleiche Weise wie in der alten Bibliothek: Der dynamic linker sortiert es für Sie, während Ihre ausführbare Datei hochfährt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X