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博客

相关推荐
平平无奇。。。1 分钟前
版本控制器之Git理论与实战
linux·git·gitee·github
宇宙第一小趴菜6 分钟前
11 安装回忆相册
linux·运维·centos7·yum·回忆相册·kh_mod
艾莉丝努力练剑7 分钟前
【Linux指令 (二)】不止于入门:探索Linux系统核心与指令的深层逻辑,理解Linux系统理论核心概念与基础指令
linux·服务器·数据结构·c++·centos
conkl17 分钟前
Linux IP 网络配置与管理详解
linux·网络·tcp/ip
ZhiqianXia1 小时前
Linux 内核中控制调试输出的频率和次数
linux
星源~1 小时前
Linux-Ubuntu系统安装特别指导
linux·qt·ubuntu·嵌入式开发·物联网设备
读书读傻了哟1 小时前
Windows 10 使用 VMware Workstation 搭建 Ubuntu 虚拟机
linux·windows·ubuntu
isyangli_blog1 小时前
Windows & Linux 操作系统分区管理
linux·运维·服务器
泽虞1 小时前
《Qt应用开发》笔记p3
linux·开发语言·数据库·c++·笔记·qt·面试
fwerfv3453452 小时前
C++与Qt图形开发
linux