欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 金融 > win10系统使用Visual Studio 2019或cmake编译SDL2为32位库时出现error C2118: 负下标winnt.h的解决方法

win10系统使用Visual Studio 2019或cmake编译SDL2为32位库时出现error C2118: 负下标winnt.h的解决方法

2024/11/30 8:58:44 来源:https://blog.csdn.net/isS_MK_GmbH/article/details/143501561  浏览:    关键词:win10系统使用Visual Studio 2019或cmake编译SDL2为32位库时出现error C2118: 负下标winnt.h的解决方法

提示:

下图蓝体字中的VS2008是错误的,其实SDL.sln是用VS2010版本的软件开发的(对于SDL-release-2.0.5.zip源码而言至少是这样,而2024-11-6为止SDL是2.30.9版本了,2.30.9版本则无需自己编译,只需下载带后缀VC的SDL2-devel-2.30.9-VC.zip即可,里面是已经编译好了SDL的动态库和静态库的)

PS: 如果你安装了cmake,也可以用cmake去编译SDL(SDL-release-2.0.5.zip),在文末另附用cmake的编译方法。先用VS2019来编译的方法:

若以Visual Studio 2019方式打开上图中的SDL.sln,需要一直按确定,直到出现

然后进入后就可以去点击每个项目的生成了,但是会出现如下图所示的问题:

也就是这个文章标题所说的问题。

1. VS2019的配置选项设为x64不会有该问题,设为win32才会有。

2. 只有较早版本的SDL2去选配置选项为win32会有这个问题,比如SDL 2.0.5版本。

3. 解决方案中有3个项目,SDL2这个项目才会有这样的问题。

解决方法一:

参考解决方法:https://stackoverflow.com/questions/70322372/sdl2-build-error-c2118-negative-subscript

意思就是找到SDL 2.0.5源码目录中include文件夹里的SDL_syswm.h并打开,

按如下修改:

把第36行的#include "begin_code.h"复制,然后注释掉,再粘贴到#include <windows.h>的后面

即#endif的后面,也就是第60行粘上#include "begin_code.h",我这么说你应该明白吧。不明白再看下图吧。啰嗦是啰嗦了点,但这很有用啊!总比别人打哑谜来得好吧。

解决方法二:

1. 打开VS2019

2. 找到上面菜单栏的:工具(T)

3. 选择:获取工具和功能

4. 找到:使用C++的桌面开发 √

6. 把右边的安装详细信息中的:Windows 10 SDK (10.0.17763.0) √选上

7. 关闭你打开的VS2019(你不关闭的话等会执行第8之后安装的时候要你关闭的呀)

8. 点击右下角的修改(M)

9. 等它安装完,然后再打开你的SDL2项目。

10.右键修改SDL2的属性-->配置属性-->常规-->Windows SDK版本-->下拉选择:10.0.17763.0-->确定-->重新生成。

其他PS:

修改SDL2项目属性的C/C++-->代码生成-->结构成员对齐:8字节

我反正修改了,毛得用噻!

我推荐你选解决方法一处理哦。

附录:使用cmake编译方法编译SDL(SDL-release-2.0.5.zip)

cmake编译出来的经过测试不能用!!!奇怪!

VS2019编译的测试倒是没啥问题。

但还是说下编译方法吧。

1. 你需要已经安装了VS2019

2. 你需要安装了cmake编译工具:https://cmake.org/download/

我下载的版本是:cmake-3.30.5-windows-x86_64.msi

3. 安装cmake,怎么安装的就不再详细说明了哦。

4. 在你解压的SDL-release-2.0.5目录新建一个叫build的文件夹(主要存放编译后的文件)

5. 打开PowerShell命令行窗口,如上图,在目录的左上角【文件】区域

(1)输入cmake,回车,验证是否安装cmake成功

(2)输入要编译是32位的库还是64位的,以32位为例,则是:

cmake -G "Visual Studio 16 2019" -A Win32 -S F:\临时下载\SDL-release-2.0.5\SDL-release-2.0.5 -B "build32"

cmake -G "Visual Studio 16 2019" -A Win32 -S F:\临时下载\SDL-release-2.0.5\SDL-release-2.0.5 -B "build32"

若是要64位的,则是cmake -G "Visual Studio 16 2019" -A x64 -S F:\临时下载\SDL-release-2.0.5\SDL-release-2.0.5 -B "build64"

(3)如果你已经改过了上面说到的SDL_syswm.h文件的内容,那进行下一步,否则会出现文章标题说的问题。

(4)输入命令:cmake --build build32 --config Release

cmake --build build32 --config Release

回车

不出意外,你会得到以下几个文件

其中你可能会看到有个黄色的C4996的警告,则找到这个SDL_windowskeyboard.c文件,在代码的最上面插入一个忽略警告的声明:#pragma warning(disable : 4996)

#pragma warning(disable : 4996)

还有一个SDL-release-2.0.5\src\stdlib\SDL_qsort.c(416,17): warning C4018: “>=”: 有符号/无符号不匹配的警告,这个暂时不知道如何点解,经过编写SDL测试程序调用上面产生的库文件倒是没得问题,所以暂时忽略这个警告咯。如果你能想到办法解决,不妨留言,我会谢谢你。

然后删除build32文件夹,再执行上面的(2)和(4)。完结!

各位看官,如果你觉得写得还行,不妨点个赞呗!我谢谢你。

biu ~ AWM-A琉光茉莉 可是三层穿透哦。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com