前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Linux下编译安装SDL2

Linux下编译安装SDL2

作者头像
DS小龙哥
发布2022-01-12 11:22:47
发布2022-01-12 11:22:47
3.7K00
代码可运行
举报
运行总次数:0
代码可运行

一、环境介绍

操作系统: ubutu18.04 64位

二、SDL介绍

(Simple DirectMedia Layer)是一个自由的跨平台的多媒体开发包,适用于游戏、游戏SDK、演示软件、模拟器、MPEG播放器和其他应用软件,用途广泛。

SDL提供了数种控制图像、声音、输出入的函数,让开发者只要用相同或是相似的代码就可以开发出跨多个平台(Linux、Windows、Mac OS X等)的应用软件。

这里使用较新的SDL2库进行编译安装。

三、下载编译SDL2

3.1 下载SDL2

下载地址: http://www.linuxfromscratch.org/blfs/view/cvs/multimedia/sdl2.html

3.2 解压编译

代码语言:javascript
代码运行次数:0
运行
复制
wbyq@wbyq:~/work_pc$ tar xvf /mnt/hgfs/linux-share-dir/SDL2-2.0.12.tar.gz
wbyq@wbyq:~/work_pc/SDL2-2.0.12$ ./configure --prefix=$PWD/_install
wbyq@wbyq:~/work_pc/SDL2-2.0.12$ make && make install
wbyq@wbyq:~/work_pc/SDL2-2.0.12$ cd _install/
wbyq@wbyq:~/work_pc/SDL2-2.0.12/_install$ ls
bin  include  lib  share
wbyq@wbyq:~/work_pc/SDL2-2.0.12/_install$ tree
.
├── bin
│   └── sdl2-config
├── include
│   └── SDL2
│       ├── begin_code.h
│       ├── close_code.h
│       ├── SDL_assert.h
│       ├── SDL_atomic.h
│       ├── SDL_audio.h
│       ├── SDL_bits.h
│       ├── SDL_blendmode.h
│       ├── SDL_clipboard.h
│       ├── SDL_config.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.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_opengles2_gl2ext.h
│       ├── SDL_opengles2_gl2.h
│       ├── SDL_opengles2_gl2platform.h
│       ├── SDL_opengles2.h
│       ├── SDL_opengles2_khrplatform.h
│       ├── SDL_opengles.h
│       ├── SDL_opengl_glext.h
│       ├── SDL_opengl.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_assert.h
│       ├── SDL_test_common.h
│       ├── SDL_test_compare.h
│       ├── SDL_test_crc32.h
│       ├── SDL_test_font.h
│       ├── SDL_test_fuzzer.h
│       ├── SDL_test.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
│   ├── cmake
│   │   └── SDL2
│   │       ├── sdl2-config.cmake
│   │       └── sdl2-config-version.cmake
│   ├── libSDL2-2.0.so.0 -> libSDL2-2.0.so.0.12.0
│   ├── libSDL2-2.0.so.0.12.0
│   ├── libSDL2.a
│   ├── libSDL2.la
│   ├── libSDL2main.a
│   ├── libSDL2main.la
│   ├── libSDL2.so -> libSDL2-2.0.so.0.12.0
│   ├── libSDL2_test.a
│   ├── libSDL2_test.la
│   └── pkgconfig
│       └── sdl2.pc
└── share
    └── aclocal
        └── sdl2.m4

9 directories, 88 files

3.3 将SDL2库安装的路径加入系统LD_LIBRARY_PATH环境变量

因为前面配置了SDL的库安装编译的目录在当前_install目录下,为了编译程序之后,运行程序能找到SDL2的库,需要将库的路径加入到系统环境变量里。可以直接在命令行执行下面代码,或者写一个脚本开机自动运行。

代码语言:javascript
代码运行次数:0
运行
复制
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/wbyq/work_pc/SDL2-2.0.12/_install/lib

四、测试SDL

下面代码使用SDL库打开窗口显示一张BMP图片。

4.1 源代码

代码语言:javascript
代码运行次数:0
运行
复制
#include <iostream>
#include <SDL.h>

int main(int argc, char** argv)
{
    //初始化SDL
    if (SDL_Init(SDL_INIT_VIDEO) != 0)
    {
        std::cout << "SDL_Init Error: " << SDL_GetError() << std::endl;
        return 1;
    }

    //创建窗口
    SDL_Window *win = nullptr;
    win = SDL_CreateWindow("Hello SDL2",
        SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
        640, 480, SDL_WINDOW_SHOWN);
    if (win == nullptr)
    {
        std::cout << SDL_GetError() << std::endl;
        return 1;
    }

    //创建渲染器
    SDL_Renderer *ren = nullptr;
    ren = SDL_CreateRenderer(win, -1,
        SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
    if (ren == nullptr)
    {
        std::cout << SDL_GetError() << std::endl;
        return 1;
    }

    //创建表面
    SDL_Surface *bmp = nullptr;
    bmp = SDL_LoadBMP("888.bmp");
    if (bmp == nullptr) {
        std::cout << SDL_GetError() << std::endl;
        return 1;
    }

    //创建材质
    SDL_Texture *tex = nullptr;
    tex = SDL_CreateTextureFromSurface(ren, bmp);
    SDL_FreeSurface(bmp);

    //清空渲染器
    SDL_RenderClear(ren);
    //将材质复制到渲染器
    SDL_RenderCopy(ren, tex, NULL, NULL);
    //呈现渲染器
    SDL_RenderPresent(ren);
    //窗口延时
    SDL_Delay(5000);

    //释放资源
    SDL_DestroyTexture(tex);
    SDL_DestroyRenderer(ren);
    SDL_DestroyWindow(win);
    //退出SDL
    SDL_Quit();

    return 0;
}

4.2 Makefile文件

代码语言:javascript
代码运行次数:0
运行
复制
CC=g++
all:
	$(CC) sdl_display.c -o app -I/home/wbyq/work_pc/SDL2-2.0.12/_install/include -I/home/wbyq/work_pc/SDL2-2.0.12/_install/include/SDL2 -lSDL2 -L/home/wbyq/work_pc/SDL2-2.0.12/_install/lib -lpthread -lm -ldl

4.3 测试效果

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/04/26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、环境介绍
  • 二、SDL介绍
  • 三、下载编译SDL2
  • 四、测试SDL
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档