赞
踩
目录
Linux fly-vm 4.15.0-142-generic #146~16.04.1-Ubuntu SMP Tue Apr 13 09:27:15 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
Simple DirectMedia Layer 是一个跨平台开发库,旨在通过 OpenGL 和 Direct3D 提供对音频、键盘、鼠标、游戏杆和图形硬件的低级访问。它被视频播放软件、模拟器和流行游戏使用,包括Valve的获奖目录和许多Humble Bundle游戏。
SDL 正式支持 Windows、Mac OS X、Linux、iOS 和 Android。可以在源代码中找到对其他平台的支持。
SDL 是用 C 编写的,在本机上与 C++ 一起使用,并且有适用于其他几种语言的绑定,包括 C# 和 Python。
SDL 2.0 在zlib 许可下分发。此许可证允许您在任何软件中自由使用 SDL。
官网地址:Simple DirectMedia Layer - Homepage
源码下载地址(SDL version 2.0.14):https://www.libsdl.org/release/SDL2-2.0.14.tar.gz
- fly@fly-vm:~/workSpace/SDL2$tar -zxvf SDL2-2.0.14.tar.gz
- fly@fly-vm:~/workSpace/SDL2$cd SDL2-2.0.14/
- fly@fly-vm:~/workSpace/SDL2/SDL2-2.0.14$./configure --prefix=$PWD/_instal
- fly@fly-vm:~/workSpace/SDL2/SDL2-2.0.14$make && make install
- fly@fly-vm:~/workSpace/SDL2/SDL2-2.0.14$cd _install/
- fly@fly-vm:~/workSpace/SDL2/SDL2-2.0.14/_install$ ls
- bin include lib share
- fly@fly-vm:~/workSpace/SDL2/SDL2-2.0.14/_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_locale.h
- │ ├── SDL_log.h
- │ ├── SDL_main.h
- │ ├── SDL_messagebox.h
- │ ├── SDL_metal.h
- │ ├── SDL_misc.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.14.0
- │ ├── libSDL2-2.0.so.0.14.0
- │ ├── libSDL2.a
- │ ├── libSDL2.la
- │ ├── libSDL2main.a
- │ ├── libSDL2main.la
- │ ├── libSDL2.so -> libSDL2-2.0.so.0.14.0
- │ ├── libSDL2_test.a
- │ ├── libSDL2_test.la
- │ └── pkgconfig
- │ └── sdl2.pc
- └── share
- └── aclocal
- └── sdl2.m4
-
- 9 directories, 90 files
pc(package configure)是包(库)配置文件,保存在PKG_CONFIG_PATH=/usr/gpephone//lib/pkgconfig::/usr/lib/pkgconfig。pc文件保存了该库的头文件、库所在的路径信息。GCC等编译器编译时,比如编译某个工程用到glib-2.0这个库,pkg-config会按照PKG_CONFIG_PATH中的路径进行搜索glib-2.0.pc,然后把lib-2.0.pc作为参数传给GCC,那么GCC就可以找到该库了。
需要重新设置 PKG_CONFIG_PATH 和LD_LIBRARY_PATH 环境变量
在/etc/profile文件中加入:
- export PATH=$PATH:/home/fly/workSpace/SDL2/SDL2-2.0.14/_install/lib
- export PATH=$PATH:/home/fly/workSpace/SDL2/SDL2-2.0.14/_install/bin
- export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/home/fly/workSpace/SDL2/SDL2-2.0.14/_install/lib/pkgconfig"
- # 使环境变量生效
- source /etc/profile
- #### Makefile创建软链接的命令
- .PHONY:all link unlink mk_cmake_dir link_bin link_pc link_m4 link_cmake
-
- SRCDIRS = $(PWD)
- DSTDIRS = /usr
- MKDIR = mkdir -p
- RM = rm -rf
-
- FILE_BIN = sdl2-config
- FILE_M4 = sdl2.m4
- FILE_PC = sdl2.pc
- DIR_CMAKE = lib/cmake/SDL2
-
-
- all:link link_bin link_pc link_m4 link_cmake
-
- mk_cmake_dir:
- sudo $(MKDIR) /usr/lib/cmake
-
- ### 在/usr/include/目录下为SDL2创建头文件目录软链接
- ### 在/usr/lib目录下,为SDL2链接库创建软链接
- link:
- @echo ">>>>make links for the files of include && lib. <<<<"
- sudo ln -s $(SRCDIRS)/include/SDL2/ $(DSTDIRS)/include/SDL2
- sudo ln -s $(SRCDIRS)/lib/libSDL2-2.0.so.0.14.0 $(DSTDIRS)/lib/libSDL2-2.0.so.0
- sudo ln -s $(SRCDIRS)/lib/libSDL2-2.0.so.0.14.0 $(DSTDIRS)/lib/libSDL2-2.0.so.0.14.0
- sudo ln -s $(SRCDIRS)/lib/libSDL2.a $(DSTDIRS)/lib/libSDL2.a
- sudo ln -s $(SRCDIRS)/lib/libSDL2.la $(DSTDIRS)/lib/libSDL2.la
- sudo ln -s $(SRCDIRS)/lib/libSDL2main.a $(DSTDIRS)/lib/libSDL2main.a
- sudo ln -s $(SRCDIRS)/lib/libSDL2main.la $(DSTDIRS)/lib/libSDL2main.la
- sudo ln -s $(SRCDIRS)/lib/libSDL2-2.0.so.0.14.0 $(DSTDIRS)/lib/libSDL2.so
- sudo ln -s $(SRCDIRS)/lib/libSDL2_test.a $(DSTDIRS)/lib/libSDL2_test.a
- sudo ln -s $(SRCDIRS)/lib/libSDL2_test.la $(DSTDIRS)/lib/libSDL2_test.la
-
- link_bin:
- @echo ">>>>make links for the files of bin. <<<<"
- sudo ln -s $(SRCDIRS)/bin/sdl2-config $(DSTDIRS)/bin/sdl2-config
-
- link_pc:
- @echo ">>>>make links for the files of pc. <<<<"
- sudo ln -s $(SRCDIRS)/lib/pkgconfig/sdl2.pc $(DSTDIRS)/lib/pkgconfig/sdl2.pc
-
- link_m4:
- @echo ">>>>make links for the files of m4. <<<<"
- sudo ln -s $(SRCDIRS)/share/aclocal/sdl2.m4 $(DSTDIRS)/share/aclocal/sdl2.m4
-
- link_cmake: mk_cmake_dir
- @echo ">>>>make links for the files of cmake. <<<<"
- sudo ln -s $(SRCDIRS)/lib/cmake/SDL2 $(DSTDIRS)/lib/cmake/SDL2
-
- unlink:
- sudo $(RM) $(DSTDIRS)/include/SDL2
- sudo $(RM) $(DSTDIRS)/lib/libSDL2*
- sudo $(RM) $(DSTDIRS)/bin/sdl2-config
- sudo $(RM) $(DSTDIRS)/lib/pkgconfig/sdl2.pc
- sudo $(RM) $(DSTDIRS)/share/aclocal/sdl2.m4
- sudo $(RM) $(DSTDIRS)/lib/cmake/SDL2
-
- /*******************************************************************
- * > File Name: sdl2_hello.c
- * > Create Time: 2021-06-06 0/22 20:47:10 +0800
- *================================================================*/
-
- #include <stdio.h>
- #include <SDL.h>
-
- int main(int argc, char* argv[])
- {
- /* 启动SDL */
- if(SDL_Init(SDL_INIT_VIDEO) != 0)
- {
- printf("SDL_Init Error.\n");
- return 1;
- }
-
- /* 打开窗口 */
- SDL_Window *win = SDL_CreateWindow("Hello World", 100, 100, 640, 480, SDL_WINDOW_SHOWN);
- if(win == NULL)
- {
- printf("SDL_CreateWindow Error.\n");
- SDL_Quit();
- return 1;
- }
-
- /* 创建渲染器 */
- SDL_Renderer *ren = SDL_CreateRenderer(win , -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
- if(ren == NULL)
- {
- SDL_DestroyWindow(win);
- printf("SDL_CreateRenderer Error.\n");
- return 1;
- }
-
- /* 加载位图图像 */
- SDL_Surface *bmp = SDL_LoadBMP("hello.bmp");
- if(bmp == NULL)
- {
- SDL_DestroyRenderer(ren);
- SDL_DestroyWindow(win);
- printf("SDL_LoadBMP Error.\n");
- SDL_Quit();
- return 1;
- }
-
- SDL_Texture *tex = SDL_CreateTextureFromSurface(ren, bmp);
- SDL_FreeSurface(bmp);
- if (tex == NULL){
- SDL_DestroyRenderer(ren);
- SDL_DestroyWindow(win);
- printf("SDL_CreateTextureFromSurface Error.\n");
- SDL_Quit();
- return 1;
- }
-
- //A sleepy rendering loop, wait for 3 seconds and render and present the screen each time
- for (int i = 0; i < 3; ++i){
- //First clear the renderer
- SDL_RenderClear(ren);
- //Draw the texture
- SDL_RenderCopy(ren, tex, NULL, NULL);
- //Update the screen
- SDL_RenderPresent(ren);
- //Take a quick break after all that hard work
- SDL_Delay(1000);
- }
-
- SDL_DestroyTexture(tex);
- SDL_DestroyRenderer(ren);
- SDL_DestroyWindow(win);
- SDL_Quit();
-
- return 0;
- }
Makefile:
- CC = gcc
- C_SRC = ${wildcard *.c}
- BIN = ${patsubst %.c, %, $(C_SRC)}
-
- INCDIRS :=
- LIBDIRS :=
-
- INCDIRS += /home/fly/workSpace/SDL2/SDL2-2.0.14/_install/include/SDL2
- LIBDIRS += /home/fly/workSpace/SDL2/SDL2-2.0.14/_install/lib
-
- CFLAGS = -g -Wall -I$(INCDIRS) -L$(LIBDIRS) -lSDL2 -lpthread -lm -ldl
-
- all:$(BIN)
-
- $(BIN):%:%.c
- $(CC) -o $@ $^ $(CFLAGS)
-
- clean:
- $(RM) a.out $(BIN)
-
- .PHONY: all clean
Ubuntu中测试效果:
======================================================================
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。