当前位置:   article > 正文

SDL2的使用 | Linux系统下的编译与安装、使用_linux sdl2字符串

linux sdl2字符串

目录

1.系统环境:ubuntu 16.04 64位

2.SDL2介绍

3.下载

4.编译、安装

5.设置环境变量

6.测试SDL 

7.参考


1.系统环境ubuntu 16.04 64位

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

2.SDL2介绍

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。

3.下载

官网地址:Simple DirectMedia Layer - Homepage

源码下载地址(SDL version 2.0.14):https://www.libsdl.org/release/SDL2-2.0.14.tar.gz

4.编译、安装

  1. fly@fly-vm:~/workSpace/SDL2$tar -zxvf SDL2-2.0.14.tar.gz
  2. fly@fly-vm:~/workSpace/SDL2$cd SDL2-2.0.14/
  3. fly@fly-vm:~/workSpace/SDL2/SDL2-2.0.14$./configure --prefix=$PWD/_instal
  4. fly@fly-vm:~/workSpace/SDL2/SDL2-2.0.14$make && make install
  5. fly@fly-vm:~/workSpace/SDL2/SDL2-2.0.14$cd _install/
  6. fly@fly-vm:~/workSpace/SDL2/SDL2-2.0.14/_install$ ls
  7. bin include lib share
  8. fly@fly-vm:~/workSpace/SDL2/SDL2-2.0.14/_install$ tree
  9. .
  10. ├── bin
  11. │   └── sdl2-config
  12. ├── include
  13. │   └── SDL2
  14. │   ├── begin_code.h
  15. │   ├── close_code.h
  16. │   ├── SDL_assert.h
  17. │   ├── SDL_atomic.h
  18. │   ├── SDL_audio.h
  19. │   ├── SDL_bits.h
  20. │   ├── SDL_blendmode.h
  21. │   ├── SDL_clipboard.h
  22. │   ├── SDL_config.h
  23. │   ├── SDL_cpuinfo.h
  24. │   ├── SDL_egl.h
  25. │   ├── SDL_endian.h
  26. │   ├── SDL_error.h
  27. │   ├── SDL_events.h
  28. │   ├── SDL_filesystem.h
  29. │   ├── SDL_gamecontroller.h
  30. │   ├── SDL_gesture.h
  31. │   ├── SDL.h
  32. │   ├── SDL_haptic.h
  33. │   ├── SDL_hints.h
  34. │   ├── SDL_joystick.h
  35. │   ├── SDL_keyboard.h
  36. │   ├── SDL_keycode.h
  37. │   ├── SDL_loadso.h
  38. │   ├── SDL_locale.h
  39. │   ├── SDL_log.h
  40. │   ├── SDL_main.h
  41. │   ├── SDL_messagebox.h
  42. │   ├── SDL_metal.h
  43. │   ├── SDL_misc.h
  44. │   ├── SDL_mouse.h
  45. │   ├── SDL_mutex.h
  46. │   ├── SDL_name.h
  47. │   ├── SDL_opengles2_gl2ext.h
  48. │   ├── SDL_opengles2_gl2.h
  49. │   ├── SDL_opengles2_gl2platform.h
  50. │   ├── SDL_opengles2.h
  51. │   ├── SDL_opengles2_khrplatform.h
  52. │   ├── SDL_opengles.h
  53. │   ├── SDL_opengl_glext.h
  54. │   ├── SDL_opengl.h
  55. │   ├── SDL_pixels.h
  56. │   ├── SDL_platform.h
  57. │   ├── SDL_power.h
  58. │   ├── SDL_quit.h
  59. │   ├── SDL_rect.h
  60. │   ├── SDL_render.h
  61. │   ├── SDL_revision.h
  62. │   ├── SDL_rwops.h
  63. │   ├── SDL_scancode.h
  64. │   ├── SDL_sensor.h
  65. │   ├── SDL_shape.h
  66. │   ├── SDL_stdinc.h
  67. │   ├── SDL_surface.h
  68. │   ├── SDL_system.h
  69. │   ├── SDL_syswm.h
  70. │   ├── SDL_test_assert.h
  71. │   ├── SDL_test_common.h
  72. │   ├── SDL_test_compare.h
  73. │   ├── SDL_test_crc32.h
  74. │   ├── SDL_test_font.h
  75. │   ├── SDL_test_fuzzer.h
  76. │   ├── SDL_test.h
  77. │   ├── SDL_test_harness.h
  78. │   ├── SDL_test_images.h
  79. │   ├── SDL_test_log.h
  80. │   ├── SDL_test_md5.h
  81. │   ├── SDL_test_memory.h
  82. │   ├── SDL_test_random.h
  83. │   ├── SDL_thread.h
  84. │   ├── SDL_timer.h
  85. │   ├── SDL_touch.h
  86. │   ├── SDL_types.h
  87. │   ├── SDL_version.h
  88. │   ├── SDL_video.h
  89. │   └── SDL_vulkan.h
  90. ├── lib
  91. │   ├── cmake
  92. │   │   └── SDL2
  93. │   │   ├── sdl2-config.cmake
  94. │   │   └── sdl2-config-version.cmake
  95. │   ├── libSDL2-2.0.so.0 -> libSDL2-2.0.so.0.14.0
  96. │   ├── libSDL2-2.0.so.0.14.0
  97. │   ├── libSDL2.a
  98. │   ├── libSDL2.la
  99. │   ├── libSDL2main.a
  100. │   ├── libSDL2main.la
  101. │   ├── libSDL2.so -> libSDL2-2.0.so.0.14.0
  102. │   ├── libSDL2_test.a
  103. │   ├── libSDL2_test.la
  104. │   └── pkgconfig
  105. │   └── sdl2.pc
  106. └── share
  107. └── aclocal
  108. └── sdl2.m4
  109. 9 directories, 90 files

5.设置环境变量

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文件中加入:

  1. export PATH=$PATH:/home/fly/workSpace/SDL2/SDL2-2.0.14/_install/lib
  2. export PATH=$PATH:/home/fly/workSpace/SDL2/SDL2-2.0.14/_install/bin
  3. export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/home/fly/workSpace/SDL2/SDL2-2.0.14/_install/lib/pkgconfig"
  1. # 使环境变量生效
  2. source /etc/profile
  1. #### Makefile创建软链接的命令
  2. .PHONY:all link unlink mk_cmake_dir link_bin link_pc link_m4 link_cmake
  3. SRCDIRS = $(PWD)
  4. DSTDIRS = /usr
  5. MKDIR = mkdir -p
  6. RM = rm -rf
  7. FILE_BIN = sdl2-config
  8. FILE_M4 = sdl2.m4
  9. FILE_PC = sdl2.pc
  10. DIR_CMAKE = lib/cmake/SDL2
  11. all:link link_bin link_pc link_m4 link_cmake
  12. mk_cmake_dir:
  13. sudo $(MKDIR) /usr/lib/cmake
  14. ### 在/usr/include/目录下为SDL2创建头文件目录软链接
  15. ### 在/usr/lib目录下,为SDL2链接库创建软链接
  16. link:
  17. @echo ">>>>make links for the files of include && lib. <<<<"
  18. sudo ln -s $(SRCDIRS)/include/SDL2/ $(DSTDIRS)/include/SDL2
  19. sudo ln -s $(SRCDIRS)/lib/libSDL2-2.0.so.0.14.0 $(DSTDIRS)/lib/libSDL2-2.0.so.0
  20. sudo ln -s $(SRCDIRS)/lib/libSDL2-2.0.so.0.14.0 $(DSTDIRS)/lib/libSDL2-2.0.so.0.14.0
  21. sudo ln -s $(SRCDIRS)/lib/libSDL2.a $(DSTDIRS)/lib/libSDL2.a
  22. sudo ln -s $(SRCDIRS)/lib/libSDL2.la $(DSTDIRS)/lib/libSDL2.la
  23. sudo ln -s $(SRCDIRS)/lib/libSDL2main.a $(DSTDIRS)/lib/libSDL2main.a
  24. sudo ln -s $(SRCDIRS)/lib/libSDL2main.la $(DSTDIRS)/lib/libSDL2main.la
  25. sudo ln -s $(SRCDIRS)/lib/libSDL2-2.0.so.0.14.0 $(DSTDIRS)/lib/libSDL2.so
  26. sudo ln -s $(SRCDIRS)/lib/libSDL2_test.a $(DSTDIRS)/lib/libSDL2_test.a
  27. sudo ln -s $(SRCDIRS)/lib/libSDL2_test.la $(DSTDIRS)/lib/libSDL2_test.la
  28. link_bin:
  29. @echo ">>>>make links for the files of bin. <<<<"
  30. sudo ln -s $(SRCDIRS)/bin/sdl2-config $(DSTDIRS)/bin/sdl2-config
  31. link_pc:
  32. @echo ">>>>make links for the files of pc. <<<<"
  33. sudo ln -s $(SRCDIRS)/lib/pkgconfig/sdl2.pc $(DSTDIRS)/lib/pkgconfig/sdl2.pc
  34. link_m4:
  35. @echo ">>>>make links for the files of m4. <<<<"
  36. sudo ln -s $(SRCDIRS)/share/aclocal/sdl2.m4 $(DSTDIRS)/share/aclocal/sdl2.m4
  37. link_cmake: mk_cmake_dir
  38. @echo ">>>>make links for the files of cmake. <<<<"
  39. sudo ln -s $(SRCDIRS)/lib/cmake/SDL2 $(DSTDIRS)/lib/cmake/SDL2
  40. unlink:
  41. sudo $(RM) $(DSTDIRS)/include/SDL2
  42. sudo $(RM) $(DSTDIRS)/lib/libSDL2*
  43. sudo $(RM) $(DSTDIRS)/bin/sdl2-config
  44. sudo $(RM) $(DSTDIRS)/lib/pkgconfig/sdl2.pc
  45. sudo $(RM) $(DSTDIRS)/share/aclocal/sdl2.m4
  46. sudo $(RM) $(DSTDIRS)/lib/cmake/SDL2

6.测试SDL 

  1. /*******************************************************************
  2. * > File Name: sdl2_hello.c
  3. * > Create Time: 2021-06-06 0/22 20:47:10 +0800
  4. *================================================================*/
  5. #include <stdio.h>
  6. #include <SDL.h>
  7. int main(int argc, char* argv[])
  8. {
  9. /* 启动SDL */
  10. if(SDL_Init(SDL_INIT_VIDEO) != 0)
  11. {
  12. printf("SDL_Init Error.\n");
  13. return 1;
  14. }
  15. /* 打开窗口 */
  16. SDL_Window *win = SDL_CreateWindow("Hello World", 100, 100, 640, 480, SDL_WINDOW_SHOWN);
  17. if(win == NULL)
  18. {
  19. printf("SDL_CreateWindow Error.\n");
  20. SDL_Quit();
  21. return 1;
  22. }
  23. /* 创建渲染器 */
  24. SDL_Renderer *ren = SDL_CreateRenderer(win , -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
  25. if(ren == NULL)
  26. {
  27. SDL_DestroyWindow(win);
  28. printf("SDL_CreateRenderer Error.\n");
  29. return 1;
  30. }
  31. /* 加载位图图像 */
  32. SDL_Surface *bmp = SDL_LoadBMP("hello.bmp");
  33. if(bmp == NULL)
  34. {
  35. SDL_DestroyRenderer(ren);
  36. SDL_DestroyWindow(win);
  37. printf("SDL_LoadBMP Error.\n");
  38. SDL_Quit();
  39. return 1;
  40. }
  41. SDL_Texture *tex = SDL_CreateTextureFromSurface(ren, bmp);
  42. SDL_FreeSurface(bmp);
  43. if (tex == NULL){
  44. SDL_DestroyRenderer(ren);
  45. SDL_DestroyWindow(win);
  46. printf("SDL_CreateTextureFromSurface Error.\n");
  47. SDL_Quit();
  48. return 1;
  49. }
  50. //A sleepy rendering loop, wait for 3 seconds and render and present the screen each time
  51. for (int i = 0; i < 3; ++i){
  52. //First clear the renderer
  53. SDL_RenderClear(ren);
  54. //Draw the texture
  55. SDL_RenderCopy(ren, tex, NULL, NULL);
  56. //Update the screen
  57. SDL_RenderPresent(ren);
  58. //Take a quick break after all that hard work
  59. SDL_Delay(1000);
  60. }
  61. SDL_DestroyTexture(tex);
  62. SDL_DestroyRenderer(ren);
  63. SDL_DestroyWindow(win);
  64. SDL_Quit();
  65. return 0;
  66. }

Makefile:

  1. CC = gcc
  2. C_SRC = ${wildcard *.c}
  3. BIN = ${patsubst %.c, %, $(C_SRC)}
  4. INCDIRS :=
  5. LIBDIRS :=
  6. INCDIRS += /home/fly/workSpace/SDL2/SDL2-2.0.14/_install/include/SDL2
  7. LIBDIRS += /home/fly/workSpace/SDL2/SDL2-2.0.14/_install/lib
  8. CFLAGS = -g -Wall -I$(INCDIRS) -L$(LIBDIRS) -lSDL2 -lpthread -lm -ldl
  9. all:$(BIN)
  10. $(BIN):%:%.c
  11. $(CC) -o $@ $^ $(CFLAGS)
  12. clean:
  13. $(RM) a.out $(BIN)
  14. .PHONY: all clean

Ubuntu中测试效果:

======================================================================

7.参考

1.Linux下编译安装SDL2

2.SDL中文教程 - 游戏编程入门

3.SDL学习代码GIT仓库

4.使用SDL1.2版本的 同学注意了,SDL2.0版本的变动

5.TwinklebearDev SDL 2.0 教程

6.我的SDL2学习GIT仓库

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/303566
推荐阅读
相关标签
  

闽ICP备14008679号