Frage

Ich benötige einige grundlegende Erläuterungen zur statischen C++-Verknüpfung.Ich habe eine Datei namens data_client.lib.Es gibt drei unabhängige Verbraucher für die Bibliotheksdatei a.exe, b.exe und c.exe.Es gibt einen Dienst namens data_server.exe, für den data_client.lib die Schnittstelle ist.Tatsächlich habe ich data_server.exe eine weitere Funktion und eine entsprechende Schnittstelle zu data_client.lib hinzugefügt.Da nur eine.exe die zusätzliche Funktionalität benötigt, erstelle ich nur eine.exe.Ich habe data_server.exe, data_client.exe und a.exe als Patch ausgeliefert.Jetzt stürzen b.exe und c.exe zufällig/inkonsistent ab

MFC42U! CException :: `rtti Complete Object Locator '+0x10

Macht das Sinn?Wenn ich auch b.exe und c.exe erstelle, tritt der Absturz nicht auf.Funktioniert das so?

War es hilfreich?

Lösung

  

Eigentlich hinzugefügt, ich eine andere Funktion data_server.exe und entsprechende Schnittstelle zu data_client.lib.

Es ist ein wenig unklar aus genau das, was zu Ihrer Bibliothek hinzugefügt wurde. Wenn es jedoch zu einer Klasse eine neue Methode oder Methoden hinzugefügt ist (und nicht nur einige neue Standalone-Funktionen), gibt es eine sehr hohe Wahrscheinlichkeit, dass alles neu zu kompilieren Ihr Problem beheben. Das VTable kann oder auch nicht aus dem Gleichgewicht geraten durch die Änderungen geworfen wurde.

Es ist auch möglich, dass Ihre Abstürze absolut nichts damit zu tun haben, und es gibt ein anderes Problem geht ... aber aus Ihrer Beschreibung, mein Geld ist auf einem VTable Problem. Wenn es nach mir ginge, würde ich neu kompilieren b.exe und c.exe und erneut testen, bevor andere Fragen zu untersuchen.

Andere Tipps

Vielleicht haben Sie keine expliziten Abhängigkeiten, aber einige Ihr Projekt Header verwendet, oder implizit in der Bibliothek Informationen setzen.

Der Fehler ist mir nicht bekannt, aber Ihre Anwendungen b.exe und c.exe verwenden eine ältere Version der Bindungsbibliothek, um mit einer neueren Version von data_server.exe zu kommunizieren.Einige v_table-Indizes sind möglicherweise deaktiviert oder so, wenn Sie eine Funktion hinzugefügt haben.Sie müssen auf jeden Fall alle Bibliotheken neu erstellen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top