2013-11-17 3 views
18

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

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

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

+0

Вы пытались скомпилировать его с помощью VS 2012 инструментария VS 2013? – bartimar

ответ

22

Это потому, что проверка SDL, попробуйте ограниченными SDL проверок:

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

У меня снова возникла эта проблема и я обратился к этому вопросу. Спасибо, что вы указали источник. Это сработало отлично. – Casey

+0

UPDATE: в visual studio 2015 (по крайней мере, в сообществе) это VC++ вместо c/C++ – Fr0zenFyr

0

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

+0

Исключение из проекта означает, что они удалены из Обозревателя решений. Как вы нажимаете их правой кнопкой мыши, если они отсутствуют? Я попытался сделать Add> Existing, чтобы добавить их обратно, но я получаю ту же ошибку. – Casey

17

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

#pragma warning(disable: 4996) 
2

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

1

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

Щелкните правой кнопкой мыши по sqlite3.c, выберите Свойства, Свойства конфигурации -> 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 Win 8.1 или Win 10 (или больше). ;)

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

+0

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

Смежные вопросы