С++: неразрешенный внешний символ _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
. Я предполагаю, что библиотека уже определила этот макрос, предвосхищая эту проблему. Несмотря на это, это не решило проблему.
Как мне следует продолжить?
Ответы
Ответ 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 был загружен, и это сделало трюк.