我将我的项目从Visual Studio 2012移植到了2013,sqlite.c将无法在其中编译。我收到这个编译时错误:
error C4996: 'GetVersionExA': was declared deprecated
error C4996: 'GetVersionExW' was declared deprecated
我得到了sqlite的最新版本,以确保它没有被计算在内,但它还没有。我不知道如何处理这个错误。我没有对源代码做任何修改;我只是创建了一个项目并包含了sqlite.h和sqlite.c。谢谢。
发布于 2013-11-26 22:34:03
实际上,C4996是一个警告,但有时它表现为一个错误。
无论如何,您可以通过使用/wd4996编译器选项或使用编译指示来禁用它:
#pragma warning(disable: 4996)
发布于 2016-07-23 06:58:15
与禁用警告相比,您可以只禁用相关代码,因为它是通过添加到文件的预处理器定义来禁用的。
右键单击sqlite3.c,单击属性、配置属性->C/C++->预处理器。确保为configuration和platform下拉菜单选择了"all configurations“(除非您只有一个platform,然后只选择一个可用的平台),并将Preprocessor Definition编辑为
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上。
发布于 2013-11-18 04:14:29
我也遇到了同样的问题,我只是从项目中排除了sqlite3.c和sqlite3.h (在解决方案资源管理器中右键单击它们并选择Exclude from Project),然后再次包含它们(再次右键单击它们并选择Include In Project)。现在它起作用了..。
https://stackoverflow.com/questions/20031597
复制相似问题