sdl(simple directmedia layer)是一款开源的跨平台多媒体开发库,用c语言编写。sdl提供了一系列用于控制图像、声音和输入输出的函数,允许开发者使用相同或相似的代码在多个平台(如linux、windows、mac os x等)上开发应用程序。目前,sdl主要用于开发游戏、模拟器和媒体播放器等多媒体应用。以下是关于在windows上设置sdl2开发环境的指南。
首先,从SDL官方网站下载适用于Windows的Visual C++版本的开发库。我选择的是适用于VS2013的版本。

解压后,文件结构应该如下所示:
└─SDL2-2.0.4
│ BUGS.txt
│ COPYING.txt
│ README-SDL.txt
│ README.txt
│ WhatsNew.txt
│
├─docs
│ doxyfile
│ README-android.md
│ README-cmake.md
│ README-directfb.md
│ ......
│
├─include
│ begin_code.h
│ close_code.h
│ SDL.h
│ SDL_assert.h
│ SDL_atomic.h
│ SDL_audio.h
│ ......
│
└─lib
├─x64
│ SDL2.dll
│ SDL2.lib
│ SDL2main.lib
│ SDL2test.lib
│
└─x86
SDL2.dll
SDL2.lib
SDL2main.lib
SDL2test.lib解压后的文件包括使用说明、文档、头文件和库文件。库文件包含x86和x64两种架构,每种架构都有一个动态链接库和三个静态链接库。
在VS中配置SDL2实际上只是配置一个C语言库,过程与配置其他库类似,主要分为三步:
一、包含必需的头文件和库文件
为了让编译器能够找到SDL2的头文件和库文件,需要在项目属性中配置路径。具体操作是进入
项目->属性->配置属性->VC++目录,然后设置包含目录和库目录,分别对应之前的include文件夹和lib/x86文件夹(VS默认使用x86架构)。

二、添加编译指令
使用第三方库时,需要在编译时指定静态链接库。在VS中,不需要手动输入编译指令,只需修改编译配置即可。具体操作是进入
项目->属性->配置属性->链接器->输入->附加依赖项,然后添加三个静态库的名字(SDL2.lib、SDL2main.lib、SDL2test.lib)。
系统特色及功能简介,主要包括以下方面: 合一:包括语言、模板风格、用户群;此版本内订简体、繁体、英文于一体;可另增设其它语言选项;模板风格指可以存在多界面的情况下进行界面互换;用户群指可写于单用户版本,也可用于多用户商城版本,具体设置可通过会员组权限修改 会员组定制:系统初安装时,内订6级会员分组,即 游客组、管理员组、VIP用户组、柜台用户组、柜台VIP用户组;此6级会员组不可以删除。另管理

三、配置动态库
配置静态库后,程序可以编译但无法调试,因为程序运行需要SDL2.dll的支持。解决方法是将SDL2.dll添加到系统的PATH环境变量中或放置在工程目录下,以便程序可以找到它。
最后,还需要为SDL2设置一个额外的配置,即程序的入口点。具体原因不详,配置方法是修改
项目->属性->配置属性->链接器->系统->子系统,将其设置为"窗口 (/SUBSYSTEM:WINDOWS)"。

完成上述配置后,应该可以运行SDL2程序了。以下是一个简单的显示图片的程序,用作Hello World测试:
#include "SDL.h" #includeusing namespace std; int main(int argc, char** argv) { if (SDL_Init(SDL_INIT_EVERYTHING) == -1) { std::cout << "SDL_Init error: " << SDL_GetError() << std::endl; return 1; }
SDL_Window* window = SDL_CreateWindow("SDL2 Displaying Image", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 640, 480, 0); if (window == nullptr) { std::cout << "SDL_CreateWindow error: " << SDL_GetError() << std::endl; SDL_Quit(); return 1; } SDL_Surface* screen = SDL_GetWindowSurface(window); SDL_Surface* image = SDL_LoadBMP("test.bmp"); if (image == nullptr) { std::cout << "SDL_LoadBMP error: " << SDL_GetError() << std::endl; SDL_DestroyWindow(window); SDL_Quit(); return 1; } SDL_BlitSurface(image, NULL, screen, NULL); SDL_UpdateWindowSurface(window); SDL_Delay(2000); SDL_FreeSurface(image); SDL_DestroyWindow(window); SDL_Quit(); return 0;}
运行该程序后,将显示test.bmp图片两秒钟。









