simple directmedia layer(sdl)是一个跨平台开发库,旨在通过opengl和direct3d提供对音频、键盘、鼠标、操纵杆和图形硬件的低级访问。多种软件,如视频播放工具、仿真器和许多热门游戏(包括valve的获奖作品和humble bundle中的众多游戏)都依赖于它。
SDL正式支持Windows、Mac OS X、Linux、iOS和Android等平台。其他平台的支持可以在源代码中找到。
SDL使用C语言编写,并可以与C++兼容,同时为其他多种语言如C#和Python提供了绑定。
SDL 2.0采用zlib许可证发布,该许可证允许您在任何软件中自由使用SDL。SDL的官方网站地址为:SDL。
在VS2013中编译SDL源代码以生成静态库和动态库,可以参考官方文档《Using SDL with Microsoft Visual C++》。在撰写本文时,SDL的最新稳定版本是2.0.12。你可以从以下链接下载SDL 2.0.12的源代码:
SDL2-2.0.12.zip 或 SDL2-2.0.12.tar.gz
下载并解压缩SDL2-2.0.12.zip或SDL2-2.0.12.tar.gz后,你将得到SDL2-2.0.12目录,如下图所示:

官方文档详细说明了如何在Visual Studio中编译SDL源代码,如下图所示:

进入源代码所在的根目录(例如,我的SDL解压目录为:D:env_buildSDL2-2.0.12)下的VisualC目录,目录结构如下图所示:

使用VS2013、VS2015、VS2017或VS2019等开发工具打开SDL.sln文件,例如,我使用VS2013打开,如下图所示:

然后选择解决方案配置(Debug或Release)和解决方案平台(Win32或X64)组合(总共有4种),以Win32下的Debug为例,使用VS2013生成SDL2-2.0.12对应的x86的Debug静态库和动态库。选择Debug模式和Win32平台后,选择菜单【生成】-【生成解决方案】,如下图所示:


所有工程和测试都成功编译后,你会看到一共25个项目。我们主要使用SDL2和SDL2main的静态库以及相应的头文件。生成的Win32的Debug库如下图所示:

其他三种配置(Win32和Release、Win64和Debug、Win64和Release)的生成方法相同。将编译好的SDL头文件(include)和库文件(lib)放置在你指定的目录下,以便后续开发使用。例如,我将它们存放在D:env_buildSDL2_2.0.12_VS2013目录下,其目录结构如下所示:
卷 Data 的文件夹 PATH 列表卷序列号为 3EE8-BA3AD:.│ BUGS.txt│ COPYING.txt│ demo_tree.txt│ README-SDL.txt│ README.txt│ WhatsNew.txt│├─docs│ doxyfile│ README-android.md│ README-cmake.md│ README-directfb.md│ README-dynapi.md│ README-emscripten.md│ README-gesture.md│ README-hg.md│ README-ios.md│ README-linux.md│ README-macosx.md│ README-nacl.md│ README-pandora.md│ README-platforms.md│ README-porting.md│ README-psp.md│ README-raspberrypi.md│ README-touch.md│ README-wince.md│ README-windows.md│ README-winrt.md│ README.md│├─include│ begin_code.h│ close_code.h│ SDL.h│ SDL_assert.h│ SDL_atomic.h│ SDL_audio.h│ SDL_bits.h│ SDL_blendmode.h│ SDL_clipboard.h│ SDL_config.h│ SDL_config.h.cmake│ SDL_config.h.in│ SDL_config_android.h│ SDL_config_iphoneos.h│ SDL_config_macosx.h│ SDL_config_macosx.h.orig│ SDL_config_minimal.h│ SDL_config_pandora.h│ SDL_config_psp.h│ SDL_config_windows.h│ SDL_config_winrt.h│ SDL_config_wiz.h│ SDL_copying.h│ SDL_cpuinfo.h│ SDL_egl.h│ SDL_endian.h│ SDL_error.h│ SDL_events.h│ SDL_filesystem.h│ SDL_gamecontroller.h│ SDL_gesture.h│ SDL_haptic.h│ SDL_hints.h│ SDL_joystick.h│ SDL_keyboard.h│ SDL_keycode.h│ SDL_loadso.h│ SDL_log.h│ SDL_main.h│ SDL_messagebox.h│ SDL_metal.h│ SDL_mouse.h│ SDL_mutex.h│ SDL_name.h│ SDL_opengl.h│ SDL_opengles.h│ SDL_opengles2.h│ SDL_opengles2_gl2.h│ SDL_opengles2_gl2ext.h│ SDL_opengles2_gl2platform.h│ SDL_opengles2_khrplatform.h│ SDL_opengl_glext.h│ SDL_pixels.h│ SDL_platform.h│ SDL_power.h│ SDL_quit.h│ SDL_rect.h│ SDL_render.h│ SDL_revision.h│ SDL_rwops.h│ SDL_scancode.h│ SDL_sensor.h│ SDL_shape.h│ SDL_stdinc.h│ SDL_surface.h│ SDL_system.h│ SDL_syswm.h│ SDL_test.h│ SDL_test_assert.h│ SDL_test_common.h│ SDL_test_compare.h│ SDL_test_crc32.h│ SDL_test_font.h│ SDL_test_fuzzer.h│ SDL_test_harness.h│ SDL_test_images.h│ SDL_test_log.h│ SDL_test_md5.h│ SDL_test_memory.h│ SDL_test_random.h│ SDL_thread.h│ SDL_timer.h│ SDL_touch.h│ SDL_types.h│ SDL_version.h│ SDL_video.h│ SDL_vulkan.h│└─lib├─win32│ ├─Debug│ │ SDL2.dll│ │ SDL2.exp│ │ SDL2.lib│ │ SDL2main.lib│ │ SDL2test.lib│ ││ └─Release│ SDL2.dll│ SDL2.lib│ SDL2main.lib│ SDL2test.lib│└─x64├─Debug│ SDL2.dll│ SDL2.lib│ SDL2main.lib│ SDL2test.lib│└─ReleaseSDL2.dllSDL2.libSDL2main.libSDL2test.lib
其中,include目录包含直接从源代码中复制的头文件,lib目录下是四种平台和配置对应的lib和dll库。以下是在Windows 10系统下使用VS2013编译好的SDL2_2.0.12库,可以在Windows平台上使用VS2013进行开发:
百度网盘链接:https://pan.baidu.com/s/15BD7C2z7VICpVoIYcejcXg 提取码:rfai
使用SDL库编写SDL程序,请参考《Using SDL with Microsoft Visual C++》中的《Creating a Project with SDL》章节。

使用VS2013创建一个基于Win32的控制台应用程序,命名为SDLDemo1,并为项目创建一个main.cpp文件,如下图所示:

在未导入SDL库头文件之前,引入SDL.h头文件会导致错误,显示为红色。
导入头文件时,我的SDL库路径为:D:env_buildSDL2_2.0.12_VS2013,导入子目录include,其完整路径为:D:env_buildSDL2_2.0.12_VS2013include。

导入库文件时,我的SDL库路径为:D:env_buildSDL2_2.0.12_VS2013,导入子目录lib下对应平台(win32或x64)的配置(Debug或Release),例如,我选择的是完整路径为:D:env_buildSDL2_2.0.12_VS2013libwin32Debug。注意:为了通用性,我使用了(Platform)和(Configuration)这两个宏,分别表示对应的平台和配置。
然后再添加附加依赖项和lib库:
SDL2.libSDL2main.lib
如下图所示:

在main.cpp中输入如下测试代码:
#include "SDL.h"int main(int argc, char* argv[]) {// 程序主体在这里return 0;}
按Ctrl+F5或者菜单【调试】-【开始执行】,如果报错,说明找不到SDL.dll,如下图所示:

由于我生成的可执行程序SDLDemo1.exe所在目录E:SoftDevelopCPlusSDLProjectsSDLDemo1Debug下没有SDL.dll,所以会报错。将之前编译生成的SDL.dll拷贝到可执行程序SDLDemo1.exe同级目录,再重新运行:


当然,为了简化操作,也可以自己编写一个SDL库的属性文件sdl2_vs2013.props。假设我的SDL2.0.12库目录为:D:env_buildSDL2_2.0.12_VS2013,其目录结构如下所示:

其内容如下所示:
<project toolsversion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">D:env_buildSDL2_2.0.12_VS2013include;%(AdditionalIncludeDirectories)D:env_buildSDL2_2.0.12_VS2013lib$(Platform)$(Configuration);%(AdditionalLibraryDirectories)SDL2.lib;SDL2main.lib;SDL2test.lib;%(AdditionalDependencies)
这里分享一下我从官网下载的SDL源代码以及使用VS2013编译好的库的下载地址:
百度网盘下载链接:https://pan.baidu.com/s/1OkVWYy1XVBYlTkIwd_3F2Q 提取码:9b6a
参考资料:
SDL官网Using SDL with Microsoft Visual C++How to Set Up SDL with Visual StudioSDL library in C/C++ with exampleslibSDL2pp
以上就是Windows下使用VS2013编译使用SDL库的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/178169.html
微信扫一扫
支付宝扫一扫