Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
Windows下使用VS2013编译使用SDL库_创想鸟

Windows下使用VS2013编译使用SDL库

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目录,如下图所示:

Windows下使用VS2013编译使用SDL库

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

Windows下使用VS2013编译使用SDL库

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

Windows下使用VS2013编译使用SDL库

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

Windows下使用VS2013编译使用SDL库

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

Windows下使用VS2013编译使用SDL库Windows下使用VS2013编译使用SDL库

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

Windows下使用VS2013编译使用SDL库

其他三种配置(Win32和Release、Win64和Debug、Win64和Release)的生成方法相同。将编译好的SDL头文件(include)和库文件(lib)放置在你指定的目录下,以便后续开发使用。例如,我将它们存放在D:env_buildSDL2_2.0.12_VS2013目录下,其目录结构如下所示:

卷 Data 的文件夹 PATH 列表卷序列号为 3EE8-BA3A

D:.│ 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》章节。

Windows下使用VS2013编译使用SDL库

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

Windows下使用VS2013编译使用SDL库

在未导入SDL库头文件之前,引入SDL.h头文件会导致错误,显示为红色。

导入头文件时,我的SDL库路径为:D:env_buildSDL2_2.0.12_VS2013,导入子目录include,其完整路径为:D:env_buildSDL2_2.0.12_VS2013include。

Windows下使用VS2013编译使用SDL库

导入库文件时,我的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

如下图所示:

Windows下使用VS2013编译使用SDL库

在main.cpp中输入如下测试代码:

#include "SDL.h"

int main(int argc, char* argv[]) {// 程序主体在这里return 0;}

按Ctrl+F5或者菜单【调试】-【开始执行】,如果报错,说明找不到SDL.dll,如下图所示:

Windows下使用VS2013编译使用SDL库

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

Windows下使用VS2013编译使用SDL库Windows下使用VS2013编译使用SDL库

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

Windows下使用VS2013编译使用SDL库

其内容如下所示:

<project toolsversion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"&gt;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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
Android Studio NDK编译报错:如何排查ndk-build错误?
上一篇 2026年9月1日 15:56:18
下一篇 2026年9月1日 16:00:30

相关推荐

  • 实现搜索结果的 A-Z 排序:PHP 教程

    本文档旨在指导开发者如何在 PHP 中实现搜索结果的 A-Z 排序功能。通过结合 AJAX 技术和 PHP 函数,可以方便地对通过 POST 方法获取的医生搜索结果进行 A-Z 排序,从而优化用户浏览体验。本文将详细介绍实现步骤,提供可复用的代码示例,并着重强调注意事项,旨在帮助开发者快速掌握并应用…

    2026年9月21日
    000
  • MySQL全文搜索引擎集成方案_提升文本数据搜索能力的实用指南

    MySQL全文搜索引擎集成方案_提升文本数据搜索能力的实用指南MySQL全文搜索引擎集成方案_提升文本数据搜索能力的实用指南MySQL全文搜索引擎集成方案_提升文本数据搜索能力的实用指南MySQL全文搜索引擎集成方案_提升文本数据搜索能力的实用指南

    mysql原生全文搜索功能存在明显局限,需结合外部搜索引擎才能满足复杂需求。1. mysql全文搜索适用于小数据量、简单查询场景,但分词能力弱,尤其对中文支持差,查询功能有限,无法实现模糊查询、纠错等高级功能,且性能随数据量增长显著下降。2. 外部搜索引擎如elasticsearch(es)和sph…

    2026年9月21日 用户投稿
    000
  • Android应用中实现游戏循环与UI更新的正确姿势

    本文旨在解决Android应用开发中,开发者尝试使用传统游戏循环(如while(running))导致应用无响应或崩溃的问题。核心内容是阐明Android事件驱动的UI模型,指导开发者如何正确初始化UI组件、设置事件监听器,并通过事件回调机制实现逻辑更新和UI刷新,避免阻塞主线程,确保应用的流畅运行…

    2026年9月21日
    700
  • google浏览器“请停用以开发者模式运行的扩展程序”怎么解决_google浏览器开发者模式扩展提示解决方法

    1、关闭开发者模式并移除手动扩展可消除警告;2、替换为官方商店版本扩展避免风险;3、修改注册表或组策略可永久屏蔽提示;4、使用命令行参数临时绕过检查。 如果您在使用Google Chrome浏览器时,看到“请停用以开发者模式运行的扩展程序”的警告提示,这通常是因为当前有通过非应用商店方式加载的扩展程…

    2026年9月21日
    900
  • 如何用AffinityPhoto导出AI生成图片?专业图像保存的详细指南

    答案:AI生成图片导出时,色彩管理确保跨设备色彩一致,避免印刷偏色。需根据用途选择sRGB(网页)或CMYK(印刷)色彩空间,结合DPI、格式和重采样设置优化输出。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ Affinity Photo…

    2026年9月21日
    600
  • 蝴蝶号无人直播怎么赚钱?从引流到转化全拆解

    蝴蝶号无人直播要赚钱,核心在于内容策划与流量转化结合。1.内容为王,需优质且有吸引力,如风景、美食、宠物或商品展示;2.引流关键在平台规则运用,包括标题、标签、封面及定时开播;3.变现方式多样,如带货、知识付费、广告等,需与内容高度匹配;4.应对挑战需持续更新内容、多账号运营、增强互动感、防范技术与…

    2026年9月21日
    1000
  • AMD RX 9070 XT显卡难得用12V-2×6供电接口:结果连烧两块!

    AMD RX 9070 XT显卡难得用12V-2×6供电接口:结果连烧两块!AMD RX 9070 XT显卡难得用12V-2×6供电接口:结果连烧两块!AMD RX 9070 XT显卡难得用12V-2×6供电接口:结果连烧两块!AMD RX 9070 XT显卡难得用12V-2×6供电接口:结果连烧两块!

    10月14日最新消息,尽管NVIDIA显卡已普遍采用12V-2×6 16针供电接口,但AMD官方至今未将其纳入标准设计。目前仅有华擎、蓝宝石等少数厂商在非公版产品中尝试使用,而华硕也曾在R9700专业卡上应用过该接口。然而近期接连曝出接口烧毁事件,引发广泛关注。 首例问题出现在华擎的RX …

    2026年9月21日 用户投稿
    000
  • 使用 EMQ 搭建 MQTT 服务器

    本教程详细介绍了如何使用 emq 搭建 mqtt 服务,适用于设备联网的 mqtt 协议。 预备条件: 一台 Ubuntu 服务器或在虚拟机中安装 Ubuntu 系统emqx-ubuntu18.04-4.3.1-amd64.deb 安装包(安装包链接见文末) 安装步骤: 使用 dpkg 安装 EMQ…

    2026年9月21日
    000
  • MAC的随航(Sidecar)功能怎么使用_MAC Sidecar功能使用教程

    首先确认设备兼容性,确保Mac和iPad满足硬件与系统要求,并登录同一Apple ID。接着开启Wi-Fi和蓝牙,使两设备处于同一网络。通过控制中心“显示器”选项选择iPad名称,无线连接即可建立;或使用数据线进行有线连接以获得更稳定体验。连接后可在“系统设置-显示器-随航”中配置扩展或镜像模式,启…

    2026年9月21日
    000
  • MacBookPro怎么下VSCode_MacBookPro下载安装VSCode详细教程

    访问code.visualstudio.com下载Mac通用版安装包;2. 解压后将Visual Studio Code.app拖入“应用程序”文件夹;3. 首次运行需右键选择“打开”以绕过安全限制;4. 推荐安装Python、Prettier等常用插件并配置环境变量;5. 若字体模糊可调整zoom…

    2026年9月21日
    000
  • edge浏览器如何找回被“睡眠标签页”休眠的页面_Edge浏览器找回睡眠标签页方法

    被休眠的Edge标签页可通过点击激活恢复;若页面丢失,可从历史记录中找回;为防止再次发生,建议关闭“睡眠标签页”功能。 如果您在使用Edge浏览器时发现某些标签页被自动休眠导致内容消失或无法查看,这通常是由于“睡眠标签页”功能为了节省系统资源而将不活跃的标签页暂停。以下是恢复这些被休眠页面的操作方法…

    2026年9月21日
    300
  • MySQL慢查询到底是什么_怎样快速定位并修复它?

    MySQL慢查询到底是什么_怎样快速定位并修复它?MySQL慢查询到底是什么_怎样快速定位并修复它?MySQL慢查询到底是什么_怎样快速定位并修复它?MySQL慢查询到底是什么_怎样快速定位并修复它?

    mysql慢查询可通过开启日志、分析日志和针对性优化快速定位修复。具体步骤:1. 修改配置文件或使用命令开启慢查询日志并设置阈值;2. 利用mysqldumpslow或pt-query-digest工具分析日志内容,找出耗时sql;3. 针对常见原因如缺少索引、sql写法不合理、数据量过大、锁竞争及…

    2026年9月21日 用户投稿
    000
  • HuggingFace的AI混合工具如何使用?开发AI模型的实用操作教程

    HuggingFace的AI混合工具核心在于其生态系统设计,通过Transformers库的统一接口、Pipelines的抽象封装、Datasets与Accelerate等工具,实现多模型组合与微调。它允许开发者将复杂任务拆解,利用预训练模型如BERT、T5等,通过Python逻辑串联不同Pipel…

    2026年9月21日
    1000
  • 实时即未来:Apache Flink实践(二)

    俗话说,工欲善其事,必先利其器!这句话确实很有道理。因此,今天我们将讨论如何在版本较低的windows电脑上学习 apache flink 知识。 Windows子系统简介:Windows内置了Ubuntu子系统,这是由Microsoft官方发布的,不是虚拟机。其安装方法也非常简单。 微软官方文档对…

    2026年9月21日
    500
  • Java中高效查找时空事件重叠的方法

    本文探讨了在Java中高效查找具有空间和时间范围定义的事件之间重叠的解决方案。核心思想是将时空事件编码为二维矩形,然后利用专业的空间索引结构(如R树、四叉树或PH树)进行快速查询。通过这种方法,可以显著提升在大规模数据集中识别事件重叠的效率,并提供了使用Tinspin索引库的示例代码和实践建议。 时…

    2026年9月21日
    000
  • Evernote如何快速搜索内容 Evernote高级搜索技巧大全

    掌握印象笔记高级搜索技巧可大幅提升效率:首先利用intitle:、tag:、created:等操作符精确查找标题、标签或日期范围内的笔记;其次通过组合多个条件如intitle:项目计划 tag:工作 created:202510实现复合筛选,并用减号排除无关结果;最后启用OCR功能,使图片和扫描PD…

    2026年9月21日
    000
  • 苹果手机怎么卸载app

    一、常规删除方式 最常用的卸载方法非常直观。只需长按想要移除的app图标,图标会进入抖动状态,同时左上角出现一个“×”标志。点击这个“×”,随后在跳出的提示框中选择“删除app”,即可完成卸载。卸载后,该应用将从主屏幕消失,并释放其所占用的存储空间。 二、保留数据的卸载方式 若你只是暂时不使用某个应…

    2026年9月21日
    000
  • PHPComposer怎么安装_PHPComposer依赖管理工具安装与使用指南

    PHPComposer是PHP的依赖管理工具,类似npm或pip。需先安装PHP,再下载并验证composer-setup.php,执行安装生成composer.phar,推荐全局安装至/usr/local/bin/composer,运行composer –version验证。使用com…

    2026年9月21日
    000
  • 怎么用VSCode编HTML_VSCodeHTML开发基础与实时预览设置教程

    答案是配置Emmet、安装Live Server等插件并优化设置可大幅提升VSCode中HTML开发效率。具体包括:使用Emmet缩写快速生成HTML结构,如输入!后按Tab键生成完整HTML5模板;安装Live Server实现保存后浏览器自动刷新的实时预览;开启“保存时格式化”功能保持代码整洁;…

    2026年9月21日
    000
  • UC浏览器网页截图工具在哪里_UC浏览器网页截图功能入口

    1、打开UC浏览器点击右上角三点菜单,查找“截屏”选项即可截图;2、部分版本支持双指下滑手势或通过分享功能保存为图片;3、建议更新至最新版以获取完整截图功能。 如果您在浏览网页时需要快速保存当前页面的内容,但找不到UC浏览器的截图功能入口,可能是由于界面更新或功能隐藏导致操作路径不明确。以下是找到并…

    2026年9月21日
    000

发表回复

登录后才能评论
关注微信