移植SDL2_ttf到ARM

本文介绍如何下载并使用最新源码进行SDL2及Freetype的跨平台编译配置,并提供了一个使用SDL2和Freetype显示中文字体的示例程序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

下载最新源码,最新的才支持SDL2

然后执行命令,,编译通过,,,,前期准备是要成功安装freetype 和sdl2

./configure --prefix=/gzz/cross_compile/SDL --host=arm-linux --with-sdl-prefix=/gzz/cross_compile/SDL --with-freetype-prefix=/gzz/cross_compile/SDL --with-gnu-ld  CPPFLAGS="-I/gzz/cross_compile/SDL/include" LDFLAGS="-L/gzz/cross_compile/SDL/lib"

make ; make install;

测试程序:

#include "SDL.h"
#include<stdio.h>
#include "SDL_ttf.h"
SDL_Window* Main_Window;
SDL_Renderer* Main_Renderer;
int main(int argc,char *argv[])

{

       char *file;
       int w,h;
       Uint8 bpp;
       Uint32 flags;
       TTF_Font *font;    
       SDL_Color red = {255,0,0};
       SDL_Color green = {0,255,0};
       SDL_Surface *message1,*message2;
       SDL_Texture *Tx_message1,*Tx_message2;
       SDL_Rect SrcR;
       SDL_Rect DestR1,DestR2;
    
     DestR1.x = 100;
     DestR1.y =  0;
     DestR1.h = 50;
     DestR1.w =  50;
     DestR2.x = 100;
     DestR2.y =  50;
     DestR2.h = 150;
     DestR2.w =  150;
       w = 480;
       h = 272;
       bpp = 0; 
       flags = SDL_SWSURFACE;
       if(SDL_Init(SDL_INIT_VIDEO) < 0){
             fprintf(stderr,"Couldn't initialize SDL:%s\n",SDL_GetError());
            return (1);
       }
   Main_Window= SDL_CreateWindow("ttf test",0,0, w, h, 0);
   Main_Renderer = SDL_CreateRenderer(Main_Window, -1, SDL_RENDERER_ACCELERATED);
   if(TTF_Init() == -1)
    return -1;
    font = TTF_OpenFont("STZHONGS.TTF",16);
   if(!font){
   printf("TTF_OpenFont:Open simsun.ttf %s\n",TTF_GetError());
   return -1;
   }
   message1 = TTF_RenderText_Solid(font, "ttf test", red);
   message2 = TTF_RenderUTF8_Solid(font, "字体显示", green);
   Tx_message1 = SDL_CreateTextureFromSurface(Main_Renderer, message1);
   SDL_FreeSurface(message1);  // we got the texture now -> free surface
   Tx_message2 = SDL_CreateTextureFromSurface(Main_Renderer, message2);
   SDL_FreeSurface(message2); 
while(1){
      if(message1||message2){
    SDL_RenderCopy(Main_Renderer, Tx_message1, NULL, &DestR1);
      /* render the current animation step of our shape */
    SDL_RenderCopy(Main_Renderer, Tx_message2, NULL, &DestR2);  
   }
SDL_RenderPresent(Main_Renderer);
}
TTF_CloseFont(font);
SDL_DestroyTexture(Tx_message1);
SDL_DestroyTexture(Tx_message2);
SDL_DestroyRenderer(Main_Renderer);
SDL_DestroyWindow(Main_Window);
SDL_Quit();
  return 0;
}



SDL2.2.0.1的移植,包含SDL的每个参数的意思,包含交叉编译器的安装,包含移植过程中出错的处理方法。 --prefix=/usr/arm 安装SDL路径 --enable-shared=yes 构建共享库[开启] --enable-nasm 装配blitters x86上的nasm(汇编器) --enable-oss 启用支持oss声音的API --enable-alsa 启用支持ALSA声音的API --enable-alsa-shared 启用动态加载ALSA声卡的API --enable-pulseaudio 启用pulseaudio(脉冲音频) --enable-pulse-shared 启用动态加载脉冲音频支持 --enable-arts 启用支持Analog Read Time Synthesizer(模拟实时合成器) --enable-arts-shared 启用动态加载ARTS声卡的支持 --enable-joystick 启用joystick(控制杆)系统 --enable-cdrom 启用只读光盘系统[关闭] --enable-threads 启用多线程子系统 --enable-timers 启用计时器子系统 --enable-endian 大小端设置 --enable-file 启用文件系统 --enable-esd 支持Enlightened(文明)声音后台程序 --enable-nas 支持NAS(网络连接存储)声卡API --enable-diskaudio 支持磁盘写入声卡驱动 --enable-dummyaudio 支持虚拟声卡驱动 --enable-altivec 使用altivec装配位块传送器在PPC上 --enable-video-x11 使用x11视频驱动 --enable-dga 允许使用x1 DGA代码 --enable-video-x11-vm 使用x11 vm延长全屏 --enable-video-x11-dgamouse 使用x11 DGA鼠标事件 --enable-video-x11-xv 使用x11 xv音像延长视频 --enable-video-x11-xinerama 启动x11多银幕支持 --enable-video-dga 使用DGA2.0视频驱动 --enable-video-directfb 启用DirectFB视频驱动 --enable-video-photon 使用QNX(嵌入式实时系统)光子视频驱动 --enable-video-ps2gs 使用PS(游戏机)2 GS视频驱动 --enable-video-opengl 包括OpenGL(开放图形语言)创建上下文 --enable-video-pth 使用GNU pth库对多线程 --enable-pthreads 使用POSIX线程(可移植操作系统)对多线程 --enable-pthread-sem 使用多线程信号 --enable-input-events 使用Linux-2.4统一输入接口 --enable-input-tslib 使用Touchscreen库输入
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值