arm-linux平台、rk3288 SDL移植
一、所需环境资源
1、arm-linux交叉编译器,这里使用的是gcc-linaro-6.3.1
2、linux交叉编译环境,这里使用的是Ubuntu 20.04
3、sdl2源码 https://github.com/libsdl-org/SDL/archive/refs/tags/release-2.30.11.tar.gz
二、代码编译
1、解压sdl2源码,并且cd到源码目录
tar -xvf SDL-release-2.30.11.tar.gz && cd SDL-release-2.30.11
2、运行生成命令
./autogen.sh
3、配置编译环境
./configure --prefix=/opt/rk3288/sdl2 --host=arm-linux --disable-video-wayland --disable-pulseaudio --enable-video-x11 NM=arm-linux-gnueabihf-nm LD=arm-linux-gnueabihf-ld CC=arm-linux-gnueabihf-gcc CXX=arm-linux-gnueabihf-g++ AR=arm-linux-gnueabihf-ar
在这一步,一开始没有加--enable-video-wayland参数,编译会报错缺少wayland头文件,加上之后报错libpulse-dev相关的头文件错误,于是加上--disable-pulseaudio就可以成功编译了。
4、编译
make -j16
5、编译安装
make install
6、环境部署
拷贝libSDL2.so到目标板子/usr/lib/目录下,并且创建一个名为libSDL2-2.0.so.0的符号链接
sudo ln -s libSDL2.so libSDL2-2.0.so.0
三、环境测试&总结
SDL测试代码
/*
* main.c
*
* Created on: 2025年1月23日
* Author: qq
*/
#include <stdio.h>
#include <SDL2/SDL.h>
#define SCREEN_WIDTH 640 //横向像素个数
#define SCREEN_HEIGHT 480 //纵向像素个数
int main(int argc,char ** argv)
{
if (SDL_Init(SDL_INIT_VIDEO) < 0)
{
printf("SDL_Init error: %s\n", SDL_GetError());
return -1;
}
SDL_Window* window = SDL_CreateWindow("SDL2教程范例",SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN | SDL_WINDOW_VULKAN);
if (!window)
{
printf("SDL_CreateWindow error: %s\n", SDL_GetError());
return -1;
}
SDL_Surface* screenSurface = SDL_GetWindowSurface(window);
if(!screenSurface)
{
printf("SDL_GetWindowSurface error: %s",SDL_GetError());
return -1;
}
SDL_FillRect(
screenSurface,
NULL,
SDL_MapRGB(
screenSurface->format,
0xFF, 0x00, 0x00)
);
SDL_UpdateWindowSurface(window);
SDL_Delay(10000);
SDL_DestroyWindow(window);
SDL_Quit();
return 0;
}
编译指令
arm-linux-gnueabihf-gcc main.c -L/opt/rk3288/sdl2/lib/ -lSDL2 -I/opt/rk3288/sdl2/include/
编译完成复制到板子内,运行时发现提示如下错误:
SDL_CreateWindow error: Vulkan suport is either not configuired in SDL or not available in current SDL video driver(offscreen) or plaform.
怀疑应该是驱动层面的问题导致的,如果有成功运行的朋友可以说一声。
刚开始是configure命令没有加--enable-video-x11,后来加上报错也是一样的,我测试了linux主机环境编译sdl2,默认都是--enable-video-wayland,但是我主机环境是X11的仍然可以运行,所以跟这个关系不大。而--disable-pulseaudio是音频相关的,也不太可能是这个影响。
然后我测试了加上这两个参数--enable-video-wayland --disable-pulseaudio在linux主机端测试是没有问题的,所以排除编译问题,所以应该是板子驱动层面的问题吧。
四、参考文章
SDL移植到ARM-linux上_sdl2 linux移植-CSDN博客