在Visual Studio 2013中编译sqlite.c时收到错误C4996

时间:2013-11-17 14:07:21

标签: sqlite compiler-errors 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。 感谢。

5 个答案:

答案 0 :(得分:26)

这是因为SDL检查,尝试禁用SDL 检查:

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

答案 1 :(得分:18)

实际上C4996是一个警告,但有时它表现为错误 无论如何,您可以通过使用/ wd4996编译器选项或使用编译指示来禁用它:

#pragma warning(disable: 4996)

答案 2 :(得分:2)

我在尝试在VS 2013 C ++应用中使用WTL时遇到了类似的问题。尝试将项目设置的Platform Toolset页面中的General更改为 Visual Studio 2013 - Windows XP (v120_xp)

答案 3 :(得分:2)

优于禁用警告,您可以通过添加到文件的预处理器定义来禁用相关代码,因为它是要禁用的。

右键单击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 8.1或Win 10(或更高版本)。 ;)

所以基本上通过禁用该警告你只是让你的代码变慢,因为它需要做的工作来弄清楚它是否在WinNT上。

答案 4 :(得分:0)

我遇到了同样的问题,我刚从项目中排除了sqlite3.c和sqlite3.h(在解决方案资源管理器中右键单击它们并选择从项目中排除)然后再次包含(再次右键单击它们并选择包括在项目中) )。现在它有效......