<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Visual Studio on Nullshow的技术博客</title>
        <link>https://nullshowjl.github.io/tags/visual-studio/</link>
        <description>Recent content in Visual Studio on Nullshow的技术博客</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-cn</language>
        <copyright>Nullshow</copyright>
        <lastBuildDate>Sat, 22 Nov 2025 16:25:00 +0100</lastBuildDate><atom:link href="https://nullshowjl.github.io/tags/visual-studio/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>【环境搭建】SDL2</title>
        <link>https://nullshowjl.github.io/p/%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BAsdl2/</link>
        <pubDate>Sat, 22 Nov 2025 14:00:30 +0200</pubDate>
        
        <guid>https://nullshowjl.github.io/p/%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BAsdl2/</guid>
        <description>&lt;img src="https://nullshowjl.github.io/p/%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BAsdl2/cover.webp" alt="Featured image of post 【环境搭建】SDL2" /&gt;&lt;p&gt;&lt;strong&gt;课程来源&lt;/strong&gt;：&lt;a class=&#34;link&#34; href=&#34;https://www.bilibili.com/cheese/play/ss18350?bsource=link_copy&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;B站-Voidmatrix&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;sdl程序库&#34;&gt;SDL程序库
&lt;/h2&gt;&lt;h3 id=&#34;简介&#34;&gt;简介
&lt;/h3&gt;&lt;p&gt;SDL全名是“Simple Direct Media Layer”，是一个简易的媒体层。它允许我们在不同的操作系统或者硬件平台上运行同一套函数，也就是说，用SDL编写的项目在完成后可以在不同的平台上编译运行。它的接口是C语言写的，非常简明。此套课程常用的SDL库包括SDL image、ttf、mixer等，比如要做图片解码就是用SDL image，需要播放音乐就用SDL mixer。此外，SDL还包含SDL Renderer，它是一个渲染器，对底层（OpenGL、Vulkan、DX等）渲染接口的封装。在不同的平台上，SDL有不同的渲染后端支持不同的渲染接口。&lt;/p&gt;
&lt;p&gt;SDL是经过行业验证的，很多游戏引擎和作品都是在SDL基础上做的，是一个很成熟的技术。&lt;/p&gt;
&lt;h3 id=&#34;获取-下载&#34;&gt;获取/ 下载
&lt;/h3&gt;&lt;p&gt;进入SDL的&lt;a class=&#34;link&#34; href=&#34;https://github.com/libsdl-org/SDL&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;GitHub&lt;/a&gt;仓库，点击进入“Releases”下的最新版本“Latest”。&lt;/p&gt;
&lt;img src=&#34;c1.png&#34; alt=&#34;&#34; style=&#34;zoom:60%;&#34; /&gt;
&lt;p&gt;进入后根据自己的电脑系统选择需要的版本。此项目因为使用的是SDL2（目前已经有了SDL3），所以选择最新的以2开头的版本即可。此项目中使用visual studio开发，所以选择下面版本。&lt;/p&gt;
&lt;img src=&#34;c2.webp&#34; alt=&#34;&#34; style=&#34;zoom:60%;&#34; /&gt;
&lt;p&gt;同理安装 &lt;a class=&#34;link&#34; href=&#34;https://github.com/libsdl-org/SDL_ttf&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;SDL_ttf&lt;/a&gt;（文本渲染）、&lt;a class=&#34;link&#34; href=&#34;https://github.com/libsdl-org/SDL_image&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;SDL_image&lt;/a&gt;（图片渲染）、&lt;a class=&#34;link&#34; href=&#34;https://github.com/libsdl-org/SDL_mixer&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;SDL_mixer&lt;/a&gt;（音频解码）、&lt;a class=&#34;link&#34; href=&#34;https://www.ferzkopp.net/wordpress/2016/01/02/sdl_gfx-sdl2_gfx/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;SDL_gfx&lt;/a&gt;（简单的图元绘制），注意此项目安装的全部是SDL2对应的版本，如果SDL安装的是SDL3，上述库也应该安装3对应的版本；另外图元绘制在一个单独的网站上，前三个都在GitHub上。&lt;/p&gt;
&lt;p&gt;此外，还需要 &lt;a class=&#34;link&#34; href=&#34;https://github.com/DaveGamble/cJSON&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;cJSON&lt;/a&gt;，也用类似方法获取。&lt;/p&gt;
&lt;h2 id=&#34;开发环境搭建&#34;&gt;开发环境搭建
&lt;/h2&gt;&lt;h3 id=&#34;通用配置&#34;&gt;通用配置
&lt;/h3&gt;&lt;p&gt;右击项目名称（注意不是“解决方案名称”），找到“属性”，找到C/C++下的“代码生成/ Code Generation”，将“运行库/ Runtime Library”改为“MT”，点击对话框右下角的“确定”或“应用”。这样可以避免程序在一些没有安装VS或者C++相关库的电脑上发生dll缺失的报错。&lt;/p&gt;
&lt;img src=&#34;c3.webp&#34; alt=&#34;&#34; style=&#34;zoom:60%;&#34; /&gt;
&lt;h3 id=&#34;配置第三方库&#34;&gt;配置第三方库
&lt;/h3&gt;&lt;p&gt;将SDL的相关文件统一放到一个文件夹中，方便后续管理。在下面的示例中，解决方案的名字是“TowerDefence”，它下面有两个项目/ Project，分别是“Demo”和“TowerDefence”。&lt;/p&gt;
&lt;img src=&#34;c4.webp&#34; alt=&#34;&#34; style=&#34;zoom:100%;&#34; /&gt;
&lt;img src=&#34;c5.webp&#34; alt=&#34;&#34; style=&#34;zoom:100%;&#34; /&gt;
&lt;p&gt;&lt;strong&gt;接下来按照C++编译的三个顺序：头文件、库文件、动态链接库分别进行相关设置。&lt;/strong&gt;&lt;/p&gt;
&lt;h4 id=&#34;头文件的配置&#34;&gt;头文件的配置
&lt;/h4&gt;&lt;p&gt;用和上面一样的方法打开“属性”界面，点击“C/C++”，右侧第一行，将相关的SDL相关的头文件添加其中。注意，因为默认添加时会用文件的绝对路径，为了灵活，我们将之改为相对路径：&lt;/p&gt;
&lt;img src=&#34;c6.webp&#34; alt=&#34;&#34; style=&#34;zoom:80%;&#34; /&gt;
&lt;p&gt;完成后，VS就能识别 &lt;code&gt;SDL.h&lt;/code&gt; 等头文件了。需要注意的是，由于SDL中也包括一个 &lt;code&gt;main&lt;/code&gt; 函数，所以我们在最开头要添加这样一句 &lt;code&gt;#define SDL_MAIN_HANDLED&lt;/code&gt; 来避免冲突。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#define SDL_MAIN_HANDLED	&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// SDL有自己的main函数定义，使用这个宏来避免冲突
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;iostream&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;SDL.h&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;SDL_image.h&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;SDL_mixer.h&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;SDL_ttf.h&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cout&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;Welcome to Demo!&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;endl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;c1&#34;&gt;// Game initialization and main loop would go here
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h4 id=&#34;链接器中库文件的设置&#34;&gt;链接器中库文件的设置
&lt;/h4&gt;&lt;p&gt;同样在“属性”界面，找到“Linker / 链接器”-“General / 常规”，右侧“Additional Library Directories”&lt;/p&gt;
&lt;img src=&#34;c7.webp&#34; alt=&#34;&#34; style=&#34;zoom:80%;&#34; /&gt;
&lt;blockquote class=&#34;alert alert-tip&#34;&gt;
    &lt;p&gt;由于我使用的电脑是64位（x64）的，所以32位的（x86）相关文件不会用到，可以直接删除（无需添加）。&lt;/p&gt;&lt;/blockquote&gt;
&lt;img src=&#34;c8.webp&#34; alt=&#34;&#34; style=&#34;zoom:80%;&#34; /&gt;
&lt;h4 id=&#34;动态链接库的设置&#34;&gt;动态链接库的设置
&lt;/h4&gt;&lt;p&gt;分别打开SDL各个文件夹中的“lib”文件夹，找到其中的dll文件，复制到项目文件夹（示例中是“Demo”项目）中。&lt;/p&gt;
&lt;img src=&#34;c11.webp&#34; alt=&#34;&#34; style=&#34;zoom:63%;&#34; /&gt;
&lt;img src=&#34;c10.webp&#34; alt=&#34;&#34; style=&#34;zoom:80%;&#34; /&gt;
&lt;p&gt;注意，由于gfx没有动态链接库，所以没有dll文件。&lt;/p&gt;
&lt;h4 id=&#34;cjson的设置&#34;&gt;cJSON的设置
&lt;/h4&gt;&lt;p&gt;直接在“Solution Explore”界面-“源文件”下添加一个筛选器，将从JSON文件直接拖拽于此即可。&lt;/p&gt;
&lt;img src=&#34;c12.webp&#34; alt=&#34;&#34; style=&#34;zoom:80%;&#34; /&gt;
&lt;p&gt;至此，SDL全家桶在Visual Studio中的配置全部完成。&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
