首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Visual Studio2013中编译sqlite.c时收到错误C4996

在Visual Studio2013中编译sqlite.c时收到错误C4996
EN

Stack Overflow用户
提问于 2013-11-17 22:07:21
回答 3查看 20K关注 0票数 22

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

代码语言:javascript
运行
复制
error C4996: 'GetVersionExA': was declared deprecated
error C4996: 'GetVersionExW' was declared deprecated

我得到了sqlite的最新版本,以确保它没有被计算在内,但它还没有。我不知道如何处理这个错误。我没有对源代码做任何修改;我只是创建了一个项目并包含了sqlite.h和sqlite.c。谢谢。

EN

回答 3

Stack Overflow用户

发布于 2013-11-26 22:34:03

实际上,C4996是一个警告,但有时它表现为一个错误。

无论如何,您可以通过使用/wd4996编译器选项或使用编译指示来禁用它:

代码语言:javascript
运行
复制
#pragma warning(disable: 4996)
票数 20
EN

Stack Overflow用户

发布于 2016-07-23 06:58:15

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

右键单击sqlite3.c,单击属性、配置属性->C/C++->预处理器。确保为configuration和platform下拉菜单选择了"all configurations“(除非您只有一个platform,然后只选择一个可用的平台),并将Preprocessor Definition编辑为

代码语言:javascript
运行
复制
SQLITE_WIN32_GETVERSIONEX=0;%(PreprocessorDefinitions)

这将跳过NTDDI_VERSION检查,因为当您的编译器访问sqlite3.c时,该符号没有定义或定义错误。

里面也有这样的评论,这可能很有趣:

代码语言:javascript
运行
复制
/*
** 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上。

票数 3
EN

Stack Overflow用户

发布于 2013-11-18 04:14:29

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20031597

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档