Nicht aufgelöstes externes symbol __vsnprintf ... (in dxerr.lib)?
Ich bin mit einer DirectX-11-Anwendung auf windows 7 und visual studio community-2015 RC. Ich bin immer noch mit Funktionen aus dem DX-SDK. Es funktionierte gut auf VS2013 aber wenn ich umgeschaltet, ich bekomme nur die folgende Fehlermeldung:
Error LNK2019 unresolved external symbol __vsnprintf referenced in function "long __stdcall StringVPrintfWorkerA(char *,unsigned int,unsigned int *,char const *,char *)" (?StringVPrintfWorkerA@@YGJPADIPAIPBD0@Z) Ancora D:\Moody\Moody\Projects\Projects\Ancora\Ancora\dxerr.lib(dxerra.obj) 1
Ich nur die DXGetErrorDescriptionA Funktion aus der dxerr Bibliothek und wenn ich einen Kommentar, der das Programm kompiliert einwandfrei. Ich habe keine Ahnung was falsch ist aber man kann es nicht aus der DX-SDK oder sonst die anderen Funktionen, die scheitern würden, richtig?
InformationsquelleAutor Moody | 2015-06-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erlebte ich das gleiche problem mit
DXGetErrorMessage()
mitDx9
und fand heraus, dass MS eine zusätzliche Bibliothek zum einbinden in dieAdditional Dependencies
Eigenschaften Seite, um dieses problem zu beheben. Der name der Bibliothek ist:legacy_stdio_definitions.lib
Hinzufügen, dass diese behoben das Problem für mich.
Ich vote dafür.Dank LaurieW. Und weitere Artikel finden Sie hier:msdn.microsoft.com/en-us/library/bb531344.aspx
Dies ist die beste Antwort.
Noch einmal, ich danke Gott für StackOverflow. Ist es zu viel verlangt, dass Microsoft wäre zu erwähnen das auf der "_vsnprintf" Web-Seite?
InformationsquelleAutor LaurieW
Statt hacking dxerr.lib manuell, man könnte hinzufügen,
irgendwo im code
InformationsquelleAutor user5477957
Den DirectX-Bibliotheken, die Sie verwenden, sind zusammengestellt mit einer älteren version von Visual Studio als die Sie verwenden. Microsoft macht manchmal änderungen an Ihren C-runtime, die Schaffung von Inkompatibilitäten zwischen den Bibliotheken kompiliert mit unterschiedlichen Versionen.
__vsnprintf
war ein internes symbol in älteren Versionen der C-runtime, existiert es nicht in die 2015 RC-version.Leider dxerr.lib (zusammen mit d3dx11.lib) wurden veraltet. Sie haben zwei Optionen - Sie können wechseln Sie zurück zu VS2013 oder Sie stoppen können mithilfe der Funktionalität von dxerr.lib. Letzteres ist wahrscheinlich besser, weil man sich duplizieren kann seine Funktionalität durch die Verwendung von FormatMessage jetzt (mehr Infos im verlinkten Artikel).
InformationsquelleAutor MuertoExcobito
fügen Sie einfach
https://msdn.microsoft.com/en-us/library/bb531344.aspx
InformationsquelleAutor Masaki Ohashi
HACKY, aber Sie konnte patch dxerr.lib.
Ersetzen __vsnprintf mit _vsnprintf (mit einer null am Ende für das Konto entfernt Unterstrich am Anfang)
InformationsquelleAutor cgp1024
Den älteren DirectX-SDK ist schon ziemlich alt, und
dxerr.lib
im DXSDK ist nicht kompatibel mit VS 2015 der C-Laufzeitumgebung, wie Sie Sie angetroffen haben.Im Allgemeinen statische Bibliotheken mit code in Ihnen nicht gut mischen von verschiedenen Versionen des Compilers. Die meisten die .libs in der älteren DirectX-SDK Arbeit mit VS 2015, weil Sie importbibliotheken für dlls oder alle Daten, Bibliotheken und enthalten daher überhaupt keinen code. Das DXSDK wurde nicht aktualisiert, seit VS 2010.
Ich habe implementiert eine version von DXERR, dass Sie bauen können, von der Quelle in Ihr Projekt, um diese zu entfernen dependacy der älteren DirectX-SDK. Sehen dieser Beitrag für details. Das heißt, ich bewusst nur unterstützt Unicode (W-version). Arbeiten Sie heraus, wie Sie die ANSI (die Eine version) einfach genug, aber es wäre am besten, wenn die Aktualisierung Ihrer app, Unicode zu verwenden.
Sehen Wo ist das DirectX-SDK (2015 Edition)? und DXUT für Direct3D 11.
UPDATE: Wie bereits in einer anderen Antwort, die Verknüpfung mit
legacy_stdio_definitions.lib
sollten die alten legacy-DirectX-SDK-version vondxerr.lib
wieder zu verbinden mit VS 2015/2017. Das heißt, Sie sollten auf die Beseitigung von Abhängigkeiten auf den älteren DirectX-SDK so viel wie möglich und DXERR ist leicht ersetzt werden, durch Ihren eigenen Modul. Sehen Ein Leben ohne D3DX.InformationsquelleAutor Chuck Walbourn
Ändern Sie können die Plattform-Toolset von Visual Studio 2015, Visual Studio 2013 und dann kompiliert.
Die Plattform-Toolset finden Sie auf der Registerkarte "allgemein" der Projekt-Eigenschaften.
InformationsquelleAutor Raymond Trel