Visual Studio 2015 中 SDL2 开发环境的搭建

Visual Studio 2015 中 SDL2 开发环境的搭建

  • Visual Studio 2015 中 SDL2 开发环境的搭建
    • 新建控制台工程
    • 拷贝并配置 SDL2 开发文件
      • 拷贝 SDL2 开发文件
      • 配置 SDL2 开发文件
    • 测试
    • SDL2 开发文件的下载链接

Visual Studio 2015 中 SDL2 开发环境的搭建

新建控制台工程

新建 Win32 控制台应用程序。

具体流程:文件->新建->项目->Win32控制台应用程序。

拷贝并配置 SDL2 开发文件

拷贝 SDL2 开发文件

  1. 头文件(*.h)拷贝至项目文件夹的 include 子文件夹下。
  2. 导入库文件(*.lib)拷贝至项目文件夹的 lib 子文件夹下。
  3. 动态库文件(*.dll)拷贝至项目文件夹下。

配置 SDL2 开发文件

  1. 打开属性面板:解决方案资源管理器->右键单击项目->属性。

  2. 头文件配置:配置属性->C/C+±>常规->附加包含目录,输入“include”(刚才拷贝文件的目录)。

  3. 导入库配置:配置属性->链接器->常规->附加库目录,输入“lib” (刚才拷贝文件的目录),配置属性->链接器->输入->附加依赖项,输入“SDL2.lib; SDL2main.lib”(导入库的文件名)。

  4. 动态库不用配置。

测试

  1. 创建源代码文件:在工程中创建一个包含 main() 函数的 C/C++ 文件(如果已经有了可以跳过这一步)。
  2. 包含头文件:
    • 如果是 C 语言中使用 SDL2,则直接使用下面代码:
    #include "SDL2/SDL.h"
    
    • 如果是 C++ 语言中使用 SDL2,则使用下面代码:
    #define __STDC_CONSTANT_MACROS
    extern "C"
    {
    #include "SDL2/SDL.h"
    }
    
  3. main() 中调用一个 SDL2 的初始化函数:
    int main(int argc, char* argv[])
    {
    	if (SDL_Init(SDL_INIT_VIDEO))
    	{
    		printf("Could not initialize SDL - %s\n", SDL_GetError());
    	}
    	else
    	{
    		printf("Success init SDL");
    	}
    
    	return 0;
    }
    

中间遇到 2 个报错:

报错 1:LNK2019 无法解析的外部符号 __imp__fprintf,该符号在函数 _ShowError 中被引用

解决方法:添加以下代码:

#pragma comment(lib, "legacy_stdio_definitions.lib")

报错 2:LNK2019 无法解析的外部符号 __imp____iob_func,该符号在函数 _ShowError 中被引用

解决方法:添加以下代码:

extern "C"
{
FILE __iob_func[3] = { *stdin, *stdout, *stderr };
}

添加完上面的的代码,运行程序。如果运行无误,则代表 SDL2 已经配置完成。

在这里插入图片描述

PS:这里要在打印语句处设置断点,不然输出完程序就结束了,来不及看输出。

SDL2 开发文件的下载链接

链接:SDL2 库.zip

来自雷霄骅博士,属于比较旧的版本。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Vue.js和Node.js的关系--类比Java系列

首先我们看一张图 这里我们类比了Java的jvm和JavaScript的node.js。 可以看到,node.js是基础,提供了基础的编译执行的能力。vue,js是实际上定义了一种他自己的代码格式,以加速开发。

CDH 6.3.2集成flink 1.18 zookeeper版本不匹配Flink-yarn启动失败

CDH 6.3.2集成flink 1.18 zookeeper版本不匹配Flink-yarn不能正常启动,而在CHD Web页面,flink日志报错提示不明确,不能定位具体错误。CM WEB启动失败错误日志如下图所示: CM查看完成错误日志 [31/Dec/2023 10:45:09 0000] 26000…

Java设计模式实战:从If-Else到策略+工厂方法的演变

引言 可能很多开发者,虽然理解了设计模式的概念,但在实际工作中应用却是另一回事。本篇文章旨在用一个具体的案例来展示如何将设计模式应用到工作的编程问题中。正所谓:“纸上得来终觉浅,绝知此事要躬行。”理论的学习固然重要&a…

若依generator模块解读,Java小白入门(七)

模块基本内容 若依的核心模块基本除了安全那一块,现在还是剩下一个比较重要的章节,是ruoyi-generator,就是代码根据模板来生成,这一块很有必要进行深入了解,本章节我们弄清楚基本框架,以后,我们会在这一块…

回顾 2023,展望 2024

by zhengkai.blog.csdn.net 项目与心得 今年最大的项目和心得,非GCP莫属,作为全球顶尖的云平台, GCP有他的优势,也有很多难用的地方。但是作为当时的一个strategic solution,我们的印度本地化项目必须使用GCP&#xf…

丰田「退股」电装,传统汽车供应链体系走到十字路口

就在中国市场热衷于车企与零部件厂商的合纵连横之际,本周,传统汽车巨头丰田公司宣布,将出售部分电装(Denso)公司股份,资金用于投入电动化、智能驾驶等新技术研发。 按照计划,丰田汽车拟出售超过…

OpenCV-11颜色通道的分离与合并

本次我们使用两个比较重要的API split(mat)将图像的通道进行分割。 merge((ch1,ch2,ch3))将多个通道进行融合。 示例代码如下: import cv2 import numpy as npimg np.zeros((480, 640, 3),…

【python 的各种模块】(8) 在python使用matplotlib和wordcloud库来画wordcloud词云图

目录 目标:用python画出,网上流行的wordcloud词云图 1 准备工作 1.1环境准备 1.1.1安装步骤 1.2 资源准备 1.2.1 文本文件内容如下 1.2.2 图片资源 2 代码测试 2.1 第一版代码和效果 2.1.1 代码和效果 2.1.2 一般plt里解决中文乱码问题 2.1…

【网络面试(4)】协议栈和套接字及连接阶段的三次握手原理

1. 协议栈 一直对操作系统系统的内核协议栈理解的比较模糊,借着这一篇博客做一下简单梳理, 我觉得最直白的理解就是,内核协议栈就是操作系统中的一个网络控制软件,就是一段程序代码,它负责和网卡驱动程序交互&#xff…

Python玫瑰花完整代码

文章目录 环境需求完整代码普通玫瑰花三维玫瑰花多彩玫瑰花环境需求 python3.11.4PyCharm Community Edition 2023.2.5pyinstaller6.2.0(可选,这个库用于打包,使程序没有python环境也可以运行,如果想发给好朋友的话需要这个库哦~)【注】 python环境搭建请见:https://want…

文献阅读:LoRA: Low-Rank Adaptation of Large Language Models

文献阅读:LoRA: Low-Rank Adaptation of Large Language Models 1. 文章简介2. 方法介绍3. 实验 & 结论 1. 基础实验 1. Bert系列模型2. GPT系列模型 2. 消解实验 1. 作用矩阵考察2. 中间维度考察3. 扰动程度分析 4. 总结 & 思考 文献链接:htt…

骑砍战团MOD开发(29)-module_scenes.py游戏场景

骑砍1战团mod开发-场景制作方法_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1Cw411N7G4/ 一.骑砍游戏场景 骑砍战团中进入城堡,乡村,战斗地图都被定义为场景,由module_scenes.py进行管理。 scene(游戏场景) 天空盒(Skyboxes.py) 地形(terrain code) 场景物(scene_…

WorkPlus私有化即时通讯的标杆,助力企业实现信息管控与保障

在信息时代,保护企业的信息安全至关重要。而私有化即时通讯成为了企业提升信息安全的重要手段。作为私有化即时通讯的领先选择,WorkPlus以其卓越的性能和领先的技术,为企业提供了安全可靠的通信解决方案。 私有化即时通讯是企业保护信息安全的…

新手快速上手掌握基础排序<二>快速排序快速入门

目录 引言 一:快速排序qsort的简介 1.qsort是一个库函数 2.库函数的查询了解方法 3.qsort的具体使用方法 4.qsort函数使用的一些注意点 5.qsort函数的特点 6.代码实现 (1)整数数组的快速排序 (2)结构体的快速排序(学…

在Go中使用Goroutines和Channels发送电子邮件

学习如何使用Goroutines和Channels在Go中发送电子邮件 在现代软件开发的世界中,通信是一个关键元素。发送电子邮件是各种目的的常见实践,例如用户通知、报告等。Go是一种静态类型和编译语言,为处理此类任务提供了高效和并发的方式。在本文中&…

论文阅读: AAAI 2022行人重识别方向论文-PFD_Net

本篇博客用于记录一篇行人重识别方向的论文所提出的优化方法《Pose-Guided Feature Disentangling for Occluded Person Re-identification Based on Transformer》,论文中提出的PDF_Net模型的backbone是采用《TransReID: Transformer-based Object Re-Identificati…

numpy数组04-数组的轴和读取数据

一、数组的轴 在numpy中数组的轴可以理解为方向,使用0,1,2...数字表示。 对于一个一维数组,只有一个0轴,对于2维数组(如shape(2,2)),有0轴和1轴…

计算机操作系统(OS)——P3内存管理

1、内存的基础知识 学习目标: 什么是内存?有何作用? 内存可存放数据。程序执行前__需要先放内存中才能被CPU处理__——缓和CPU与硬盘之间的速度矛盾。 【思考】在多道程序程序下,系统会有多个进程并发执行,也就是说…

「GPT」G、P、T分别是啥意思?

G意为Generative :生成式 比如,生成式的分类器(模型)包括---- generative classifiers: naive Bayes classifier and linear discriminant analysis 与之对应的为判别式----- discriminative model: logistic regression P意为…

Java项目:102SSM汽车租赁系统

博主主页:Java旅途 简介:分享计算机知识、学习路线、系统源码及教程 文末获取源码 一、项目介绍 汽车租赁系统基于SpringSpringMVCMybatis开发,系统使用shiro框架做权限安全控制,超级管理员登录系统后可根据自己的实际需求配角色…