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琉光茉莉 可是三层穿透哦。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/58772.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

推荐一款管道数据检索工具:Pipedata-Pro

Pipedata-Pro是一款专为设计石油、天然气、水和蒸汽管道及管道系统的工程师开发的应用程序。该应用程序提供了设计管道系统所需的工程数据&#xff0c;拥有一个全面的管道类型、配件和材料数据库。 软件特点&#xff1a; 1. 技术参数查询&#xff1a;Pipedata-Pro 提供关于管道…

算法竞赛(Python)-数组

文章目录 一 、排序算法二 、二分查找1 二分查找讲解2 二分查找题目&#xff08;1&#xff09;二分查找&#xff08;2&#xff09;在排序数组中查找元素的第一个和最后一个位置&#xff08;3&#xff09;两数之和 II - 输入有序数组 三、数组双指针1对撞指针对撞指针题目1&…

基于STM32的LCD1602显示Proteus仿真设计(仿真+程序+设计报告+讲解视频)

这里写目录标题 1.主要功能0. 资料清单&下载链接资料下载链接&#xff1a;2.仿真设计3. 程序设计4. 设计报告5. 框图 基于STM32的LCD1602显示Proteus仿真设计(仿真程序设计报告讲解视频&#xff09; 仿真图proteus 8.9 程序编译器&#xff1a;keil 5 编程语言&#xff1a…

SpringBoot项目编译报错 类文件具有错误的版本 61.0, 应为 52.0

springboot项目在编译时报错&#xff1a; /Users/Apple/Developer/art/caicai/cai-api/dubbo-samples/1-basic/dubbo-samples-spring-boot/dubbo-samples-spring-boot-provider/src/main/java/org/apache/dubbo/springboot/demo/provider/ProviderApplication.java:22:32 java…

PVE纵览-备份与快照指南

PVE纵览-备份与快照指南 文章目录 PVE纵览-备份与快照指南摘要1 备份与快照概述定义与区别备份与快照在PVE中的应用场景 2 PVE 备份功能详解备份类型与策略配置备份任务自动化备份管理 3 PVE 快照功能详解快照的工作原理快照的创建与恢复机制快照对系统性能的影响快照的使用场景…

Mac如何实现最简单的随时监测实时运行状态的方法

Mac book有着不同于Windows的设计逻辑与交互设计&#xff0c;使得Mac book有着非常棒的使用体验&#xff0c;但是在Mac电脑的使用时间过长时&#xff0c;电脑也会出现响应速度变慢或应用程序崩溃的情况&#xff0c;当发生的时候却不知道什么原因导致的&#xff0c;想要查询电脑…

JavaWeb合集23-文件上传

二十三 、 文件上传 实现效果&#xff1a;用户点击上传按钮、选择上传的头像&#xff0c;确定自动上传&#xff0c;将上传的文件保存到指定的目录中&#xff0c;并重新命名&#xff0c;生成访问链接&#xff0c;返回给前端进行回显。 1、前端实现 vue3AntDesignVue实现 <tem…

WPF之iconfont(字体图标)使用

1&#xff0c;前文&#xff1a; WPF的Xaml是与前端的Html有着高度相似性的标记语言&#xff0c;所以Xaml也可同Html一般轻松使用阿里提供的海量字体图标&#xff0c;从而有效的减少开发工作度。 2&#xff0c;下载字体图标&#xff1a; 登录阿里图标库网iconfont-阿里巴巴矢量…

leetcode92:反转链表||

给你单链表的头指针 head 和两个整数 left 和 right &#xff0c;其中 left < right 。请你反转从位置 left 到位置 right 的链表节点&#xff0c;返回 反转后的链表 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], left 2, right 4 输出&#xff1a;[1,4,3,2…

Python-安装与PyCharm的安装配置(1)

目录 安装 打开运行 PyCharm的安装 新建项目 安装 找到官网下载对应的电脑对应的版本 Welcome to Python.org -- 官网 下载稳定版的 安装记得勾选配置环境&#xff0c;这样自己就不需要再配置环境了 安装成功 至此python的运行环境就安装好了 打开运行 在开始菜单中可以…

python的编程基础分支,循环与函数的应用知识

编程基础是学习任何编程语言的必备知识之一。在Python中&#xff0c;分支、循环和函数是常用的编程概念&#xff0c;它们可以让我们编写出更复杂、更灵活的程序。 分支 分支是根据条件来决定程序执行的不同路径。在Python中&#xff0c;我们使用if语句来实现分支。 if 条件:# …

qt QLocale详解

1、概述 QLocale是Qt框架中的一个类&#xff0c;用于处理与本地化相关的操作。它能够方便地实现日期、时间、数字和货币的格式化和解析&#xff0c;支持不同的语言、区域设置和字符集。QLocale提供了一种跨平台的方式来获取当前系统的语言设置&#xff0c;并返回该语言的本地化…

缓存、注解、分页

一.缓存 作用&#xff1a;应用查询上&#xff0c;内存中的块区域。 缓存查询结果&#xff0c;减少与数据库的交互&#xff0c;从而提高运行效率。 1.SqlSession 缓存 1. 又称为一级缓存&#xff0c;mybatis自动开启。 2. 作用范围&#xff1a;同一…

uniapp vue3 使用echarts-gl 绘画3d图表

我自己翻遍了网上&#xff0c;以及插件市场&#xff0c;其实并没有uniapp 上使用echarts-gl的样例&#xff0c;大多数都是使用插件市场的echarts的插件 开始自己尝试直接用echartsgl 没有成功&#xff0c;后来尝试使用threejs 但是也遇到一些问题&#xff0c;最后我看官网的时…

【言语理解】片段阅读整体概述

1.1 题型分类 片段阅读一般有以下六种&#xff1a; 中心理解题 “这段文字意在说明&#xff1a;” “这段文字意在强调&#xff1a;” “这段文字主要介绍了&#xff1a;” “下列对文意概括最恰当的是&#xff1a;”标题拟定题 “最适合做这段文字标题的是&#xff1a;”下文…

什么是 OpenTelemetry?

OpenTelemetry 定义 OpenTelemetry (OTel) 是一个开源可观测性框架&#xff0c;允许开发团队以单一、统一的格式生成、处理和传输遥测数据&#xff08;telemetry data&#xff09;。它由云原生计算基金会 (CNCF) 开发&#xff0c;旨在提供标准化协议和工具&#xff0c;用于收集…

ESP32 gptimer通用定时器初始化报错:assert failed: timer_ll_set_clock_prescale

背景&#xff1a;IDF版本V5.1.2 &#xff0c;配置ESP32 通用定时器&#xff0c;实现100HZ&#xff0c;占空比50% 的PWM波形。 根据乐鑫官方的IDF指导文档设置内部计数器的分辨率&#xff0c;计数器每滴答一次相当于 1 / resolution_hz 秒。 &#xff08;ESP-IDF编程指导文档&a…

【NOIP普及组】统计单词数

【NOIP普及组】统计单词数 &#x1f490;The Begin&#x1f490;点点关注&#xff0c;收藏不迷路&#x1f490; 一般的文本编辑器都有查找单词的功能&#xff0c;该功能可以快速定位特定单词在文章中的位置&#xff0c;有的还能统计出特定单词在文章中出现的次数。 现在&#x…

Unity 如何优雅的限定文本长度, 包含对特殊字符,汉字,数字的处理。实际的案例包括 用户昵称

常规限定文本长度 ( 通过 UntiyEngine.UI.Inputfiled 附带的长度限定 ) 痛点1 无法对中文&#xff0c;数字&#xff0c;英文进行识别&#xff0c;同样数量的汉字和同样数量的英文像素长度是不一样的&#xff0c;当我们限定固定长度后&#xff0c;在界面上的排版不够美观 痛点2…

jmeter常用配置元件介绍总结之函数助手

系列文章目录 1.windows、linux安装jmeter及设置中文显示 2.jmeter常用配置元件介绍总结之安装插件 3.jmeter常用配置元件介绍总结之取样器 jmeter常用配置元件介绍总结之函数助手 1.进入函数助手对话框2.常用函数的使用介绍2.1.RandomFromMultipleVars函数2.2.Random函数2.3.R…