0

Ich habe Third-Party-Bibliothek, die eine statische .lib-Datei ist, die sie mir sagen, wurde mit VS2010 kompiliert. Wir entwickeln unsere Anwendung in VS2013 und müssen auf diese Bibliothek verlinken.Link zu einer statischen .Lib kompiliert mit VS2010, wenn ich mit VS2013 kompiliere?

Wenn wir versuchen, bekommen wir diese Fehler:

error C1047: The object or library file '.../xxx.lib' was created with an older compiler than other objects; rebuild old objects and libraries

Bedeutet dies, dass wir VS2010-Compiler verwenden, muss es zu verknüpfen? (Wir können keine neu kompilierte Version der Bibliothek erhalten)

+0

Beachten Sie, dass mit dem Wechsel zum [Universal CRT] (https://blogs.msdn.microsoft.com/vcblog/2015/03/03/introducing-the-universal-crt/) für VS 2015, das alte Die statische Bibliothek verbindet sich möglicherweise überhaupt nicht mit VS 2015. Sie sollten planen, diese Black-Box-Bibliothek irgendwann zu ersetzen, wenn Sie sie nicht wiederherstellen können. –

Antwort

4

Mehr oder weniger; Ja.

Im Allgemeinen müssen alle Teile eines C++ - Programms kompiliert und mit dem exakten gleichen Compiler (einschließlich der genauen Compiler-Version) verknüpft werden.

Normalerweise müssen Sie beim Erstellen der verschiedenen Teile auch die gleichen Compiler-Optionen verwenden.

Es gibt Ausnahmen, aber das ist die allgemeine Faustregel.

Es gibt keine standardisierte C++ ABI.

+0

Nicht nur der gleiche Compiler, sondern auch die gleichen Optionen (insbesondere die Laufzeitbibliothek und '_ITERATOR_DEBUG_LEVEL' sollten übereinstimmen). – Cameron

+0

Stimmt, ich werde die Antwort aktualisieren. Vielen Dank. –

+0

Zum Beispiel werden Sie nur Schmerzen bekommen, wenn Sie debuggen und nicht debuggen Objekte/libs in der gleichen ausführbaren Datei verbinden. –