Hi3559 交叉编译 OSD 必要库 zlib, freetype, sdl, sdl-ttf

本文档详细介绍了在Hi3559平台上,为OSD(On-Screen Display)功能进行交叉编译所需的库,包括zlib 1.2.11、freetype 2.10.2、SDL 1.2.15以及sdl-ttf。在编译过程中,特别强调了字体加载失败的问题,指出可能原因在于库未正确安装。指导中提到了使用arm-hisiv500-linux作为Host,并提示用户根据实际环境调整gcc路径。

osd测试文件,编译运行一直出现 font couldn't load, 发现其实是库没有正确安装。

注意安装时Host要用 arm-hisiv500-linux,gcc位置根据你自己具体安装位置调整。

############## zlib ############## 
############## 1.2.11 ############## 

CC=aarch64-himix100-linux-gcc ./configure --prefix=/hisi_ext/zlib

make 

sudo make install

############## freetype ############## 
############## 2.10.2 ############## 

./configure --prefix=/hisi_ext/freetype \
--host=arm-hisiv500-linux CC=aarch64-himix100-linux-gcc \
--enable-freetype-config \
--with-png=no --with-zlib=no --with-harfbuzz=no

make

sudo make install

############## SDL ############## 
############## 1.2.15 ############## 

sudo ./configure --prefix=/hisi_ext/sdl \
--host=arm-hisiv500-linux \
CC=/opt/hisi-linux/x86-arm/aarch64-himix100-linux/bin/aarch64-himix100-linux-gcc

(make clean)

make

sudo make install

############## SDL_TTF ############## 
############## sdl-ttf-sdl-1.2############## 

./configure --prefix=/hisi_ext/sdl-ttf \
--host=arm-hisiv500-linux \
CC=/opt/hisi-linux/x86-arm/aarch64-himix100-linux/bin/aarch64-himix100-linux-gcc \
--with-sdl-prefix=/hisi_ext/sdl \
--with-ft-prefix=/hisi_ext/freetype \
LDFLAGS="-L/hisi_ext/freetype/lib -L/hisi_ext/zlib/lib -L/hisi_ext/sdl/lib -lSDL -lfreetype -lz" \
CPPFLAGS="-I/hisi_ext/freetype/include -I/hisi_ext/zlib/include -I/hisi_ext/sdl/include"

make

sudo make install

############## Test_demo ############## 
##############  test.c ############## 

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "SDL.h"
#include "SDL_ttf.h"
#include "time.h"

 
#define FONT_PATH       "./Ubuntu-BI.ttf"
int string_to_bmp(char *pu8Str);
int cnt = 0;
int main()
{
    
    time_t now;
    struct tm *ptm;
    char timestr[100] = {0};
    while(1)
    {
        usleep(1000000);
        time(&now);
        ptm = localtime(&now);
        snprintf(timestr,100,"时间%d-%02d-%02d %02d:%02d:%02d",ptm->tm_year+1900,ptm->tm_mon+1,ptm->tm_mday,ptm->tm_hour,ptm->tm_min,ptm->tm_sec);
        string_to_bmp(timestr);
        memset(timestr,0,100);
        if(cnt++ > 5)
        {
            break;
        }
    }
    return 0;
}
 
int string_to_bmp(char *pu8Str)
{
    SDL_PixelFormat *fmt;
    TTF_Font *font;  
    SDL_Surface *text, *temp;  
 
    if (TTF_Init() < 0 ) 
    {  
        fprintf(stderr, "Couldn't initialize TTF: %s\n",SDL_GetError());  
        SDL_Quit();
    }  
 
    font = TTF_OpenFont(FONT_PATH, 80); 
    if ( font == NULL ) 
    {  
        fprintf(stderr, "Couldn't load %d pt font from %s: %s\n",18,"ptsize", SDL_GetError());  
    }  
 
    SDL_Color forecol = { 0xff, 0xff, 0xff, 0xff };  
    text = TTF_RenderUTF8_Solid(font, pu8Str, forecol);
 
    fmt = (SDL_PixelFormat*)malloc(sizeof(SDL_PixelFormat));
    memset(fmt,0,sizeof(SDL_PixelFormat));
    fmt->BitsPerPixel = 16;
    fmt->BytesPerPixel = 2;
    fmt->colorkey = 0xffffffff;
    fmt->alpha = 0xff;
 
    temp = SDL_ConvertSurface(text,fmt,0);

    char savename[10] = {0};

    snprintf(savename,10,"%d.bmp",cnt);
    printf("savename = %s\n",savename);
    SDL_SaveBMP(temp, savename); 
 
    SDL_FreeSurface(text);  
    SDL_FreeSurface(temp);
    TTF_CloseFont(font);  
    TTF_Quit();  
 
    return 0;
}

##############  Makefile ############## 

SDL_PATH = /hisi_ext/sdl/include/SDL
SDL_TTL_PATH = /hisi_ext/sdl-ttf/include/SDL
FT_PATH = /hisi_ext/freetype/include
Z_PATH = /hisi_ext/zlib/include

SDL_LIB_PATH = /hisi_ext/sdl/lib
SDL_TTF_LIB_PATH = /hisi_ext/sdl-ttf/lib
FT_LIB_PATH = /hisi_ext/freetype/lib
Z_LIB_PATH = /hisi_ext/zlib/lib

CCO = aarch64-himix100-linux-gcc

CC = $(CCO)
INCLUDE = -I$(FT_PATH) -I$(SDL_TTL_PATH) -I$(SDL_PATH) -I$(Z_PATH)
LIB = -L$(FT_LIB_PATH) -L$(SDL_LIB_PATH) -L$(SDL_TTF_LIB_PATH) -L$(Z_LIB_PATH)
SERVER_OBJS = soapC.o stdsoap2.o duration.o wsaapi.o soapClient.o onvif_cilent.o


all: arm 
arm:
	$(CCO) *.c $(INCLUDE) $(LIB) -lfreetype -lSDL -lSDL_ttf -lz -o test


clean: 
	rm -f *.o test

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值