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

news2024/11/13 22:11:35

文章目录

  • 前言
    • 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[]) {
    // 初始化 SDL
    if (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 使用率
    }

    // 释放资源并关闭 SDL
    SDL_DestroyWindow(win);
    SDL_Quit();

    return 0;
}

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


总结

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1944882.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

pageoffice常见问题处理

pageoffice是由卓正软件公司开发的一套在线编辑office的插件。要在自己的系统中使用&#xff0c;需要进行集成开发&#xff0c;把pageoffice嵌入到自己的系统中。以下记录在使用过程中常见的问题和解决方法&#xff1a; 1.PageOffice对客户端的要求 office 不能是家庭版&#x…

【区块链+绿色低碳】基于区块链的碳排放管理系统 | FISCO BCOS应用案例

目前业内的碳排放核查方式主要依靠于第三方人工核查、手动填报数据&#xff0c;然后由具备有认证资质的机构进行核验 盖章。但在此过程中存在数据造假的情况&#xff0c;给碳排放量核算的准确性、可靠性带来挑战。 中科易云采用国产开源联盟链 FISCO BCOS&#xff0c;推出基于…

【时序约束】读懂用好Timing_report

一、静态时序分析&#xff1a; 静态时序分析&#xff08;Static Timing Analysis&#xff09;简称 STA&#xff0c;采用穷尽的分析方法来提取出整个电路存在的所有时序路径&#xff0c;计算信号在这些路径上的传播延时&#xff0c;检查信号的建立和保持时间是否满足时序要求&a…

SpringBoot原理——面试高频

目录 1.什么是起步依赖&#xff1f; 2.起步依赖如何工作&#xff1f; 3.什么是自动配置&#xff1f; 4.自动配置原理 1.什么是起步依赖&#xff1f; 起步依赖是Spring Boot中的一个概念&#xff0c;它实质上是一个Maven项目对象模型&#xff08;POM&#xff09;&#xff0c;…

1 go语言环境的搭建

本专栏将从基础开始&#xff0c;循序渐进&#xff0c;由浅入深讲解Go语言&#xff0c;希望大家都能够从中有所收获&#xff0c;也请大家多多支持。 查看相关资料与知识库 专栏地址:Go专栏 如果文章知识点有错误的地方&#xff0c;请指正&#xff01;大家一起学习&#xff0c;…

IT服务管理业务策划与实施:追求IT用户满意与持续改进

在当今的信息化时代&#xff0c;IT服务已成为企业运营不可或缺的一部分。有效的IT服务管理不仅能够提升企业运营效率&#xff0c;还能显著增强IT用户满意度。本文将围绕IT服务管理的业务策划与实施展开探讨&#xff0c;旨在为运维团队提供一套全面、系统的参考框架。 一、IT服…

AI在候选人评估中的作用:精准筛选与HR决策的助力

一、引言 随着科技的迅猛发展&#xff0c;人工智能&#xff08;AI&#xff09;技术已逐渐渗透到各个行业和领域&#xff0c;人力资源管理&#xff08;HRM&#xff09;亦不例外。在候选人评估的环节中&#xff0c;AI技术以其高效、精准的特性&#xff0c;正在逐步改变着传统的招…

el-table表格 及其el-pagination分页 封装及其使用

1、首页在components文件夹中新建table文件夹 table文件夹下table.vue全部代码&#xff1a; <template><el-table:stripe"stripe":row-key"handlerRowKey()":tree-props"treeProps":border"border":show-summary"showS…

Vue3相比于Vue2进行了哪些更新

1、响应式原理 vue2 vue2中采用 defineProperty 来劫持整个对象&#xff0c;然后进行深度遍历所有属性&#xff0c;给每个属性添加getter和setter&#xff0c;结合发布订阅模式实现响应式。 存在的问题&#xff1a; 检测不到对象属性的添加和删除数组API方法无法监听到需要对…

蓝桥杯单片机学习总结(Day15 超声波测距)

开启超声波模块测距方法&#xff1a; X20106A是一款红外线检波接收的专用芯片&#xff0c;常用于电视机红外遥控接收器。当CX20106A接收到40KHz的信号时&#xff08;第五脚200K的电阻决定了其频率为40KHz&#xff09;&#xff0c;会在OUT脚输出一个低电平下降脉冲。这个信号甚至…

IDEA打开终端报错Cannot open Local Terminal命令行功能

idea项目中不能打开命令行功能 IDEA打开终端报错Cannot open Local Terminal 意思是打开命令行发生错误 idea上配置shell终端&#xff0c;命令行页面 打开右上角 File–> setting–> Tools–> 终端 找到Shell 路径 文本框中原本是是powershell.exe&#xff0c;现在…

Java | Leetcode Java题解之第278题第一个错误的版本

题目&#xff1a; 题解&#xff1a; public class Solution extends VersionControl {public int firstBadVersion(int n) {int left 1, right n;while (left < right) { // 循环直至区间左右端点相同int mid left (right - left) / 2; // 防止计算时溢出if (isBadVers…

企业专线和家庭宽带的区别

企业专线&#xff08;也称为商业互联网服务&#xff09;与家庭宽带在多个方面存在区别&#xff0c;这些差异主要体现在网络性能、服务质量、价格、合同条款以及支持服务上。以下是两者的主要区别&#xff1a; 1、网络质量和速度&#xff1a; 企业专线通常提供更稳定、更快的网络…

虚拟机Ubuntu20.04 利用串口调试机械臂

虚拟机Ubuntu20.04 利用串口调试机械臂 串口库问题 由于机械臂使用的是串口进行驱动控制&#xff0c;在python中相关的串口库为serial和pyserial两个&#xff0c;这里我曾踩过雷同时安装了serial与pyserial两个库&#xff0c;导致报错如下所示&#xff1a; AttributeError: m…

Apache Tomcat文件包含漏洞复现(详细教程)

1.漏洞原理 Tomcat 服务器是一个免费的开放源代码的Web 应用服务器&#xff0c;其安装后会默认开启ajp连接器&#xff0c;方便与其他web服务器通过ajp协议进行交互。属于轻量级应用服务器&#xff0c;在中小型系统和并发访问用户不是很多的场合下被普遍使用&#xff0c;是开发和…

责任链模式的应用与解析

目录 责任链模式责任链模式结构责任链模式适用场景责任链模式优缺点练手题目题目描述输入描述输出描述题解 责任链模式 责任链模式&#xff0c;亦称职责链模式、命令链&#xff0c;是一种行为设计模式&#xff0c;允许你将请求沿着处理者链进行发送。收到请求后&#xff0c;每…

韩顺平0基础学java——第36天

p715-735 反射调用速度慢 反射调用优化-关闭访问检查 1. Method和Field、Constructor对象都有setAccessible() 方法2. setAccessible作用是启动和禁用访问安全检查的开关 3&#xff0e;参数值为true表示反射的对象在使用时取消访问检查&#xff0c;提高反射的效率。参数值 为…

Redis核心技术与实战学习笔记

Redis核心技术与实战学习笔记 最近想沉下心来看下redis&#xff0c;买了蒋德钧老师的《Redis 核心技术与实战》,这里记录一些学习笔记 希望能够坚持下去有想一起学习的童鞋&#xff0c;可以点击跳转到文章尾部获取学习资源,仅供学习不要用于任何商业用途!!! redis知识全景图 …

2024-07-22 Unity AI行为树1 —— 框架介绍

文章目录 1 行为树2 行为树驱动方式3 行为树结点分类3.1 控制节点3.2 执行节点 4 行为树与状态机比较 本文章参考 B 站唐老狮 2023年直播内容。 点击前往唐老狮 B 站主页。 1 行为树 ​ 行为树&#xff08;Behavior Tree&#xff0c;BT&#xff09;在游戏 AI 中是一种用于控制…

精益管理意识与企业战略规划的匹配度如何评估?

众所周知&#xff0c;精益管理不仅要求企业在生产运营过程中实现资源的最大化利用&#xff0c;同时也强调企业战略规划的精准性和前瞻性。因此&#xff0c;评估精益管理意识与企业战略规划的匹配度&#xff0c;对于企业的长期发展至关重要。具体方法如深圳天行健企业管理咨询公…