Frage

Ist es richtig, link statische Bibliothek (.lib) kompiliert mit VS 2005 mit einem Programm kompiliert mit VS 2008?Beide, Bibliothek und mein Programm in C++geschrieben.Dieses Programm läuft auf Windows Mobile 6 Professional-emulator.

Dies scheint zu funktionieren, es gibt keine Verbindung, Fehler.Aber das Programm stürzt während des Startvorgangs, denn seltsame Dinge geschehen im inneren der verknüpften Bibliothek.E. g.lib zurückkehren kann, ein Vektor von Zeichen, die mit der Größe der große negative Zahl.

Es gibt keine solche Probleme, wenn das Programm kompiliert mit VS 2005.

Was noch seltsamer ist, das problem ist nur bei Verwendung der release-Konfiguration für das bauen.Beim kompilieren mit debug-Konfiguration das problem nicht mehr auftreten.

War es hilfreich?

Lösung

VS2005 und VS2008 verwenden Sie die verschiedenen STL-Implementationen.Wenn die VS2005-code liefert einen Vektor, der von der Objekt-Speicher-layout anders aus, was VS2008 erwartet.Das dürfte der Grund für die kaputte Werte sehen Sie in der zurückgegebenen Datum.

Als Faustregel sollten Sie immer alle kompilieren C++ Module eines Projekts, mit dem gleichen compiler und alle Einstellungen/#definiert gleich.

Eine Besondere #define, die bewirkt, dass ein ähnliches Verhalten ist die SECURE_SCL #definieren von VS2008.Zwei Module kompiliert mit verschiedenen Einstellungen erstellen, die genau auf Ihre Probleme, da #Definition SECURE_SCL führt mehr member-Variablen zu verschiedenen C++ - Bibliothek Klassen.

Andere Tipps

Es ist nicht falsch einen link zu einer älteren Bibliothek in der Weise, die Sie beschreiben, aber es überrascht mich nicht, Sie sehen einige seltsame Verhalten.Paar sanity checks:

  • Sind beide Dateien mit der gleiche Versionen der dieselbe Laufzeit-Bibliotheken?
  • Ist Ihr .EXE-Anwendung "sehen" die gleichen header-Dateien, die die .LIB gebaut wurde, vor?Stellen Sie sicher, dass die _WIN32_WINNT (etc.) Makros erklärt richtig.

Und wenn Sie sagen .LIB, meinst du eine echte statische Bibliothek (mylib.lib) oder eine Importbibliothek für die DLL (mylib.lib -> mylib.dll)?

Und was sind die compile/link-Einstellungen für Ihre VS2008 ausführbare Projekt?

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