【问题标题】:Error C4996 received when compiling sqlite.c in Visual Studio 2013在 Visual Studio 2013 中编译 sqlite.c 时收到错误 C4996
【发布时间】:2013-11-30 15:32:33
【问题描述】:

我将我的项目从 Visual Studio 2012 移植到 2013 并且 sqlite.c 不会在其中编译。我收到了这个编译时错误:

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

我得到了最新版本的 sqlite 以确保它没有被考虑,但它没有。我不确定如何处理这个错误。我没有对源代码进行任何修改;我只是创建一个项目,包括 sqlite.h 和 sqlite.c。 谢谢。

【问题讨论】:

  • 你试过在VS 2013中用VS 2012工具包编译它吗?

标签: sqlite compiler-errors visual-studio-2013


【解决方案1】:

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

【讨论】:

  • 从项目中排除它们意味着它们已从解决方案资源管理器中删除。如果它们丢失,您如何右键单击它们?我尝试执行 Add > Existing 将它们添加回来,但我得到了同样的错误。
【解决方案2】:

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

#pragma warning(disable: 4996)

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

      • 我又遇到了这个问题,然后又提到了这个问题。感谢您确定来源。这非常有效。
      • 更新:在 Visual Studio 2015 中(至少在社区版中)它是 VC++ 而不是 c/c++
      【解决方案5】:

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

      右击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 上。

      【讨论】:

      • 很想得到一个反对票,同时建议一种方法来避免在不禁用​​编译器安全功能的情况下收到警告。
      • 这是迄今为止更好的方法,也是我使用的方法。
      猜你喜欢
      • 1970-01-01
      • 2014-01-06
      • 1970-01-01
      • 2013-12-30
      • 2014-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多