C ++: Symbole externe non résolu _sprintf et _sscanf dans Visual Studio 2015

Pour un projet de recherche, j’écris un additif C ++ à un langage informatique scientifique. Malheureusement, la bibliothèque qui permet aux utilisateurs de le faire n’est pas très à jour.

J’ai démarré le projet dans XCode, où il s’est bien construit. Plus tard, j’ai dû passer à un PC, j’ai donc migré le code vers Visual Studio 2015. Depuis, je n’ai pas pu créer en raison des erreurs suivantes:

LNK2001 : unresolved external symbol _sprintf LNK2019 : unresolved external symbol _sscanf referenced in function _GetDDouble LNK2019 : unresolved external symbol _sprintf referenced in function _CheckRunningInMainThread 

Une tentative de correction consistait à append l’en-tête #define _CRT_SECURE_NO_WARNINGS . Cependant, ceci a) n’a corrigé aucune erreur et b) ajouté l’avertissement C4005 : '_CRT_SECURE_NO_WARNINGS': macro redefinition . Je suppose que la bibliothèque a déjà défini cette macro, anticipant ce problème. Quoi qu’il en soit, cela n’a pas résolu le problème.

Comment dois-je procéder?

Ajoutez la bibliothèque suivante aux fichiers d’entrée de l’éditeur de liens:

 legacy_stdio_definitions.lib 

VS 2015 utilise maintenant des définitions en ligne qui appellent des fonctions internes pour la plupart des fonctions stdio.h . Si un fichier object (ou un membre de la bibliothèque) dépend de l’une de ces fonctions, le legacy_stdio_definitions.lib fournit une version pouvant être liée de manière externe à la fonction pouvant être liée.

Votre autre option est de recomstackr l’unité qui dépend de ces fonctions avec VS 2015 (c’est probablement l’option préférée).

J’ai cette erreur en compilant les plugins max de cyclisme contre la version 5 max sdk (pure c api). Le correctif de la bibliothèque héritée ne fonctionnait pas pour moi (cela devrait être le cas, et si quelqu’un avait une idée de ce que cela pourrait être, je serais curieux), mais j’ai défini _NO_CRT_STDIO_INLINE avant que stdio ne soit chargé et que cela fonctionne.