当前位置: 首页 > news >正文

【音视频之SDL2】Ubuntu编译配置SDL2环境

文章目录

  • 前言
    • SDL2 是什么
    • 编译SDL2
      • 下载必备的包
      • 下载SDL2.30.5源码
    • 编写CMake模板项目
    • 测试代码
  • 总结


前言

SDL2(Simple DirectMedia Layer 2)是一个用于开发跨平台多媒体应用程序的广泛使用的库,特别是在游戏开发中。它为音频、键盘、鼠标、操纵杆、2D和3D图形硬件抽象层提供了低级别的访问。对于想在Ubuntu上配置和编译SDL2环境的开发者来说,本文将帮助你快速了解SDL2的基本功能,并提供相关的配置步骤。


SDL2 是什么

SDL2(Simple DirectMedia Layer 2)是一个跨平台的多媒体库,旨在为开发者提供对多种硬件设备的低级别访问,从而简化开发高性能、多平台应用程序的过程。SDL2的主要功能包括:

  1. 音频管理:SDL2提供了对音频设备的访问,可以播放音效和音乐,支持多种音频格式,并且可以处理音频的录制和播放。

  2. 输入处理:SDL2支持键盘、鼠标和游戏控制器的输入处理,使得用户可以轻松地捕获和响应这些设备的输入事件。

  3. 图形渲染:SDL2为2D图形提供了简单而强大的API,支持硬件加速的渲染操作,并且能够与OpenGL和Vulkan等3D图形API配合使用。

  4. 窗口管理:SDL2可以创建和管理窗口,并处理与窗口相关的事件,如窗口大小变化、窗口最小化等。

  5. 跨平台支持:SDL2支持Windows、macOS、Linux、iOS和Android等多种操作系统,使得开发者可以编写一次代码,运行在多个平台上。

SDL2的灵活性和强大功能,使其成为游戏开发和多媒体应用开发的首选工具之一。

编译SDL2

下载必备的包

首先,肯定需要安装gcc与g++,这是必须的,因为SDL2就是基于C/C++写的

sudo apt-get install gcc g++ make

然后你需要安装下面这些东西:

sudo apt-get install libsdl2-2.0 libsdl2-dev libsdl2-mixer-dev libsdl2-image-dev libsdl2-ttf-dev libsdl2-gfx-dev

使用这个命令进行验证是否已经安装成功了:

sdl2-config --exec-prefix --version –cflag

下载SDL2.30.5源码

首先我们打开下面这个链接:SDL2 download
在这里插入图片描述
接着解压缩,然后进入SDL2目录输入下面这个命令:

./configure --enable-static --enable-shared --prefix=/home/ubuntu/Libs/SDL2/build

./configure:
./configure 是一个配置脚本,用于检查系统环境和设置编译选项。它通常是从源码包中运行的,用来生成适合于当前系统的Makefile。这个脚本根据提供的选项和系统配置来准备编译环境。

–enable-static:
–enable-static 选项告诉配置脚本要生成静态库。静态库是被嵌入到最终可执行文件中的库,这样可执行文件在运行时不需要依赖外部的库文件。

–enable-shared:
–enable-shared 选项告诉配置脚本要生成共享库(也称为动态库)。共享库在运行时由多个可执行文件共享,从而减少内存使用,并且可以在不重新编译应用程序的情况下升级库。

–prefix=/home/ubuntu/Libs/SDL2/build:
–prefix 选项指定安装路径。在编译和安装完成后,所有生成的文件(包括库文件、头文件和可执行文件)将被安装到指定的路径下。这里指定的路径是 /home/ubuntu/Libs/SDL2/build,这意味着SDL2库文件和其他相关文件将被安装到这个目录中。

在这里插入图片描述
这样就是OK了

然后使用:

make -j12

-j后面的是你的CPU核数

在这里插入图片描述
最后使用make install即可完成

下面就是我们编译好的内容了
在这里插入图片描述

编写CMake模板项目

首先文件结构如下:

.
├── build
│   ├── CMakeCache.txt
│   ├── CMakeFiles
│   ├── cmake_install.cmake
│   └── Makefile
├── CMakeLists.txt
├── include
│   └── SDL2
├── lib
│   ├── libSDL2.a
│   └── libSDL2main.a
└── main.c

CMakeLists.txt文件内容如下:

cmake_minimum_required(VERSION 3.10)
project(MySDL2Project)set(CMAKE_C_STANDARD 99)# 设置 SDL2 库的路径
set(SDL2_DIR "/home/ubuntu/Libs/SDL2/cmake_template/lib/cmake/SDL2")# 查找 SDL2 库
find_package(SDL2 REQUIRED)include_directories(${SDL2_INCLUDE_DIRS})add_executable(MySDL2Project main.c)# 链接 SDL2 库和数学库
target_link_libraries(MySDL2Project ${SDL2_LIBRARIES} m)

测试代码

#include <SDL.h>
#include <stdio.h>int main(int argc, char* argv[]) {// 初始化 SDLif (SDL_Init(SDL_INIT_VIDEO) != 0) {printf("SDL_Init Error: %s\n", SDL_GetError());return 1;}// 创建一个窗口SDL_Window *win = SDL_CreateWindow("SDL2 Window", 100, 100, 640, 480, SDL_WINDOW_SHOWN);if (win == NULL) {printf("SDL_CreateWindow Error: %s\n", SDL_GetError());SDL_Quit();return 1;}// 简单事件循环SDL_Event e;int quit = 0;while (!quit) {while (SDL_PollEvent(&e)) {if (e.type == SDL_QUIT) {quit = 1;}}SDL_Delay(16); // 延迟以减少 CPU 使用率}// 释放资源并关闭 SDLSDL_DestroyWindow(win);SDL_Quit();return 0;
}

运行展示:
在这里插入图片描述


总结

SDL2作为一个功能强大且跨平台的多媒体开发库,提供了丰富的功能来处理音频、图形、输入和窗口管理等多媒体任务。在Ubuntu上配置和编译SDL2环境,可以让开发者充分利用其强大的功能,快速开发高性能的多媒体应用程序。通过本文的介绍,你已经了解了SDL2的基本功能和重要性,接下来可以按照具体的配置步骤,在你的Ubuntu系统上搭建并使用SDL2环境,为你的开发项目打下坚实的基础。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 如何实现无公网IP远程访问本地内网部署的Proxmox VE虚拟机平台
  • 莫斯科国际机场折腾“豪游”的我们
  • mac清理软件哪个好用免费 MacBook电脑清理软件推荐 怎么清理mac
  • 【Java算法专场】二分查找(上)
  • sortBy排序操作
  • 【JavaScript】01数组原型对象的最后一个元素、计数器
  • 【精通Redis】Redis命令详解
  • clangd配置
  • vue - devtools 安装
  • MacOS DockerDesktop配置文件daemon.json的位置
  • MakeReal3D v5.0 爆炸视图
  • 基于springboot+vue+uniapp的校园二手交易小程序
  • K8s大模型算力调度策略的深度解析
  • 使用 AI 支持的元描述生成器提升SEO效果
  • Bugku-ctf-web-eval
  • 《深入 React 技术栈》
  • 【知识碎片】第三方登录弹窗效果
  • Debian下无root权限使用Python访问Oracle
  • Linux链接文件
  • SpiderData 2019年2月23日 DApp数据排行榜
  • yii2权限控制rbac之rule详细讲解
  • -- 查询加强-- 使用如何where子句进行筛选,% _ like的使用
  • 翻译 | 老司机带你秒懂内存管理 - 第一部(共三部)
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 吐槽Javascript系列二:数组中的splice和slice方法
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  • 一些关于Rust在2019年的思考
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • ​ubuntu下安装kvm虚拟机
  • ​人工智能书单(数学基础篇)
  • #includecmath
  • (+4)2.2UML建模图
  • (1)(1.9) MSP (version 4.2)
  • (4)通过调用hadoop的java api实现本地文件上传到hadoop文件系统上
  • (C++哈希表01)
  • (附源码)计算机毕业设计ssm基于B_S的汽车售后服务管理系统
  • (每日一问)设计模式:设计模式的原则与分类——如何提升代码质量?
  • (三十)Flask之wtforms库【剖析源码上篇】
  • (学习日记)2024.04.10:UCOSIII第三十八节:事件实验
  • (转) ns2/nam与nam实现相关的文件
  • (转)memcache、redis缓存
  • (转)德国人的记事本
  • **CI中自动类加载的用法总结
  • .Net 中Partitioner static与dynamic的性能对比
  • .NET 中让 Task 支持带超时的异步等待
  • .net中我喜欢的两种验证码
  • @RequestBody与@RequestParam
  • @RunWith注解作用
  • [Angular 基础] - 指令(directives)
  • [Angularjs]asp.net mvc+angularjs+web api单页应用
  • [BZOJ 4034][HAOI2015]T2 [树链剖分]
  • [CISCN2019 华东北赛区]Web2
  • [CQOI 2011]动态逆序对
  • [flask] flask的基本介绍、flask快速搭建项目并运行
  • [hdu 3746] Cyclic Nacklace [kmp]