Подтвердить что ты не робот

С++: неразрешенный внешний символ _sprintf и _sscanf в Visual Studio 2015

Для исследовательского проекта я пишу надстройку С++ для научного компьютерного языка. К сожалению, библиотека, которая позволяет пользователям делать это, не очень хорошо обновляется.

Я начал проект в XCode, где он построил отлично. Позже мне пришлось переместиться на компьютер, поэтому я перенес код в Visual Studio 2015. Поскольку я не смог создать из-за следующих ошибок:

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

Попытка исправления заключалась в том, чтобы добавить заголовок #define _CRT_SECURE_NO_WARNINGS. Однако это: а) не зафиксировано никаких ошибок и b) добавлено предупреждение C4005 : '_CRT_SECURE_NO_WARNINGS': macro redefinition. Я предполагаю, что библиотека уже определила этот макрос, предвосхищая эту проблему. Несмотря на это, это не решило проблему.

Как мне следует продолжить?

4b9b3361

Ответ 1

Добавьте следующие библиотеки в входные файлы компоновщика:

legacy_stdio_definitions.lib

VS 2015 теперь использует встроенные определения, которые вызывают внутренние функции для многих функций stdio.h. Если объектный файл (или член библиотеки) зависит от одной из этих функций, то legacy_stdio_definitions.lib предоставляет внешнюю связующую версию функции, с которой можно связать.

Другой вариант - перекомпилировать устройство, которое зависит от этих функций с VS 2015 (это, вероятно, предпочтительный вариант).

Ответ 2

Я получил эту ошибку, компилируя плагины с максимальным подключением max max до 5 max sdk (pure c api). Утилита устаревшей библиотеки не работала для меня (она должна была быть, и если бы кто-нибудь знал, почему это может быть не интересно), но я определил _NO_CRT_STDIO_INLINE до того, как stdio был загружен, и это сделало трюк.