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

Ошибка C4996, полученная при компиляции sqlite.c в Visual Studio 2013

Я перенес свой проект из Visual Studio 2012 до 2013 года, и sqlite.c не будет компилироваться в нем. Я получаю эту ошибку времени компиляции:

error C4996: 'GetVersionExA': was declared deprecated
error C4996: 'GetVersionExW' was declared deprecated

Я получил последнюю версию sqlite, чтобы убедиться, что она не была учтена, но это не так. Я не уверен, что делать с этой ошибкой. Я не внес никаких изменений в источник; Я просто создаю проект, включая sqlite.h и sqlite.c. Спасибо.

4b9b3361

Ответ 1

Это потому, что проверка SDL, попробуйте отключить проверку SDL:

Project Properties > Configuration Properties > C/C++ > General > SDL checks [set to No]

Ответ 2

На самом деле C4996 является предупреждением, но иногда он ведет себя как ошибка.
В любом случае вы можете просто отключить его, используя параметр компилятора /wd 4996 или используя прагма:

#pragma warning(disable: 4996)

Ответ 3

У меня была аналогичная проблема, пытающаяся использовать WTL в приложении VS 2013 С++. Попробуйте изменить Platform Toolset на странице General ваших параметров проекта на Visual Studio 2013 - Windows XP (v120_xp).

Ответ 4

Лучше, чем отключать предупреждения, вы можете просто отключить соответствующий код, поскольку он предназначен для отключения путем добавления в файл препроцессора.

Щелкните правой кнопкой мыши по sqlite3.c, выберите Свойства, Свойства конфигурации → C/С++ → Препроцессор. Убедитесь, что вы выбрали "все конфигурации" для выпадающих списков конфигурации и платформы (если только у вас нет только одной платформы, а затем выберите только ту, которая доступна) и отредактируйте определения препроцессора как

SQLITE_WIN32_GETVERSIONEX=0;%(PreprocessorDefinitions)

Это пропустит проверку NTDDI_VERSION, так как этот символ не определен или определен неверно, когда ваш компилятор попадает на sqlite3.c.

Там тоже есть этот комментарий, который может быть интересным:

/*
** NOTE: All sub-platforms where the GetVersionEx[AW] functions are
**       deprecated are always assumed to be based on the NT kernel.
*/

Сетевой эффект установки #define заключается в том, что ваша ОС всегда считается основанной на Win NT, которая есть, так как вы - Win 8.1 или Win 10 (или больше).;)

Итак, в основном, отключив это предупреждение, вы просто делаете свой код медленнее, потому что ему нужно выполнить работу, чтобы выяснить, есть ли это в WinNT или нет.

Ответ 5

У меня была такая же проблема, и я просто исключил sqlite3.c и sqlite3.h из проекта (в обозревателе решений щелкните правой кнопкой мыши на них и выберите "Исключить из проекта" ), а затем снова включитесь (щелкните правой кнопкой мыши по ним снова и выберите "Включить в проект" ). И теперь это работает...