C ++: símbolo externo no resuelto _sprintf y _sscanf en Visual Studio 2015

Para un proyecto de investigación, estoy escribiendo un complemento de C ++ para un lenguaje de computación científica. Desafortunadamente, la biblioteca que permite a los usuarios hacer esto no se mantiene muy actualizada.

Comencé el proyecto en XCode, donde se construyó bien. Más tarde tuve que cambiarme a una PC, así que migré el código a Visual Studio 2015. Desde que hice esto, no he podido comstackr debido a los siguientes errores:

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

Un bash de corrección fue agregar el encabezado #define _CRT_SECURE_NO_WARNINGS . Sin embargo, esto a) no corrigió errores yb) agregó la advertencia C4005 : '_CRT_SECURE_NO_WARNINGS': macro redefinition . Asumo que la biblioteca ya definió esta macro, anticipando este problema. En cualquier caso, no resolvió el problema.

¿Cómo debo proceder?

Agregue la siguiente biblioteca a los archivos de entrada del vinculador:

 legacy_stdio_definitions.lib 

VS 2015 ahora usa definiciones en línea que llaman a funciones internas para muchas de las funciones stdio.h . Si un archivo de objeto (o miembro de la biblioteca) depende de una de esas funciones, legacy_stdio_definitions.lib proporciona una versión de la función con legacy_stdio_definitions.lib externo que puede vincularse.

Su otra opción es recomstackr la unidad que depende de esas funciones con VS 2015 (esta es probablemente la opción preferida).

Recibí este error al comstackr los complementos de max en función de la versión 5 max sdk (pure c api). La solución de la biblioteca heredada no me funcionó (debería haberlo hecho, y si alguien tuviera alguna idea de por qué no tendría curiosidad), pero definí _NO_CRT_STDIO_INLINE antes de que se cargara stdio y eso sirvió.