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到源码目录

bash 复制代码
tar -xvf SDL-release-2.30.11.tar.gz && cd SDL-release-2.30.11

2、运行生成命令

bash 复制代码
./autogen.sh

3、配置编译环境

bash 复制代码
./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、编译

bash 复制代码
make -j16

5、编译安装

bash 复制代码
make install 

6、环境部署

拷贝libSDL2.so到目标板子/usr/lib/目录下,并且创建一个名为libSDL2-2.0.so.0的符号链接

bash 复制代码
sudo ln -s libSDL2.so libSDL2-2.0.so.0

三、环境测试&总结

SDL测试代码

cpp 复制代码
/*
 * 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;
}

编译指令

bash 复制代码
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博客

相关推荐
嘿rasa6 分钟前
2025最新系统 Linux 教程(三)
linux·运维·服务器
Star Learning Python11 分钟前
Linux系统-文本处理三剑客-grep命令、sed命令、awk命令
linux
facaixxx202416 分钟前
应用镜像是什么?轻量应用服务器的镜像大全
linux·运维·服务器
火龙谷44 分钟前
【hadoop】master一键启动hadoop集群(高可用)
linux·hadoop
noravinsc1 小时前
Linux 下 Module 工具的介绍与使用
linux·运维·服务器
Sunlight_7771 小时前
第五章 SQLite数据库:1、SQLite 基础语法及使用案例
java·linux·服务器·jvm·数据库·tcp/ip·sqlite
Silence4Allen1 小时前
Ubuntu 安装WPS Office
linux·ubuntu·wps
程序员JerrySUN2 小时前
驱动开发硬核特训 · Day 11(下篇):从 virtio_blk 看虚拟总线驱动模型的真实落地
linux·驱动开发·嵌入式硬件
半兽先生2 小时前
CentOS 中安装 vim
linux·centos·vim
长流小哥4 小时前
Linux网络编程实战:从字节序到UDP协议栈的深度解析与开发指南
linux·c语言·开发语言·网络·udp