Symbole externe non résolu __vsnprintf ( ... ) (dans dxerr.lib)?
Je suis en cours d'exécution un DirectX 11 windows 7 et visual studio community 2015 RC. Je suis toujours à l'aide des fonctions de la DX SDK. Il a bien fonctionné sur VS2013 mais quand je suis passé je reçois l'erreur suivante:
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
Je n'utilise que le DXGetErrorDescriptionA fonction de la dxerr bibliothèque et quand j'en commentaire, le programme compile bien. Je n'ai aucune idée de ce qui est mauvais, mais il ne peut pas être de la DX SDK ou sinon les autres fonctions de l'échec droit?
OriginalL'auteur Moody | 2015-06-25
Vous devez vous connecter pour publier un commentaire.
J'ai eu le même problème à l'aide de
DXGetErrorMessage()
avecDx9
et a trouvé que la MS ont fourni une bibliothèque supplémentaire à inclure dans leAdditional Dependencies
page de propriétés pour remédier à ce problème. Le nom de la bibliothèque est:legacy_stdio_definitions.lib
L'ajout de cette résolu le problème pour moi.
Je vote pour cette.Grâce LaurieW. Et l'article supplémentaire peut être trouvé ici:msdn.microsoft.com/en-us/library/bb531344.aspx
C'est la meilleure réponse.
Encore une fois, merci à Dieu pour StackOverflow. Est-ce trop demander que Microsoft serait de le préciser dans le "_vsnprintf" page Web?
OriginalL'auteur LaurieW
Au lieu de piratage dxerr.lib manuellement, vous pouvez ajouter
quelque part dans votre code
OriginalL'auteur user5477957
Les bibliothèques DirectX que vous utilisez sont compilés avec une version antérieure de Visual Studio que vous utilisez. Microsoft fait parfois des changements à leur exécution C, en créant des incompatibilités entre les bibliothèques compilées avec les différentes versions.
__vsnprintf
était un symbole interne dans les anciennes versions de leur exécution C, il n'existe pas dans l'2015 version RC.Malheureusement, dxerr.lib (avec d3dx11.lib) ont été obsolète. Vous avez deux options: vous pouvez revenir à VS2013 ou vous pouvez vous arrêter à l'aide de la fonctionnalité de dxerr.lib. Ce dernier est probablement mieux, parce que vous pouvez dupliquer ses fonctionnalités à l'aide de FormatMessage maintenant (plus d'infos dans l'article lié).
OriginalL'auteur MuertoExcobito
juste ajouter
https://msdn.microsoft.com/en-us/library/bb531344.aspx
OriginalL'auteur Masaki Ohashi
HACKY mais vous pouvez patch dxerr.lib.
Remplacer __vsnprintf avec _vsnprintf (avec une nulle en fin de compte pour enlever le trait de soulignement au début)
OriginalL'auteur cgp1024
L'héritage DirectX SDK est assez ancien, et
dxerr.lib
dans le DXSDK n'est pas compatible avec VS 2015 du Runtime C que vous avez rencontré.En général statiques des bibliothèques de code entre eux ne se mélange pas bien de différentes versions du compilateur. La plupart de la .libs dans l'héritage DirectX SDK travailler avec VS 2015 parce qu'ils sont des bibliothèques d'importation pour les dll ou toutes les bibliothèques de données et, par conséquent, ne contiennent aucun code. Le DXSDK n'a pas été mis à jour depuis VS 2010.
J'ai mis en place une version de DXERR que vous pouvez créer à partir de la source dans votre projet pour supprimer cette dependacy de l'héritage SDK de DirectX. Voir ce post pour plus de détails. Cela dit, j'ai volontairement pris en charge uniquement Unicode (la version W). Vous pouvez travailler sur la façon de faire de l'ANSI (Une version) assez facilement, mais il serait mieux si la mise à jour de votre application pour utiliser l'Unicode.
Voir Où est le SDK de DirectX (Édition 2015)? et DXUT pour Direct3D 11.
Mise à JOUR: Comme indiqué dans une autre réponse de la liaison avec
legacy_stdio_definitions.lib
devrait faire l'ancien héritage DirectX SDK version dedxerr.lib
lien avec VS 2015/2017. Cela dit, vous devriez travailler à la suppression des dépendances sur l'héritage DirectX SDK, autant que possible, et DXERR est facilement remplacé par votre propre module. Voir Vivre sans D3DX.OriginalL'auteur Chuck Walbourn
Vous pouvez modifier la Plate-forme d'Outils de Visual Studio 2015 à Visual Studio 2013 et alors qu'il compile.
La Plate-forme d'Outils se trouve sur l'onglet Général des Propriétés du Projet.
OriginalL'auteur Raymond Trel