SDL+FreeType+SDL_ttf庫編譯過程
freeType編譯過程
- 解壓:
tar -xvf freetype-2.4.10.tar.gz
- 進入freeType目錄:
./configure CC=arm-hisiv500-linux-gcc --host=arm-hisiv500-linux
- 1
make
make install
SDL編譯過程
- 解壓:
tar -xvf SDL-1.2.15.tar.gz
- 進入SDL目錄:
./configure CC=arm-hisiv500-linux-gcc --host=arm-hisiv500-linux --disable-alsa --disable-pulseaudio --enable-esd=no
- 1
出現問題1:
./src/audio/esd/SDL_esdaudio.c:30:17: fatal error: esd.h: 沒有那個文件或目錄
- 1
解決方法1:
加上--enable-esd=no
,這個錯誤好像是音頻相關的錯誤,這裏直接關掉音頻。
- make
- make install
SDL_ttf編譯過程
- 解壓:
tar xvf SDL_ttf-2.0.11.tar.gz
- 進入SDL_ttf-2.0.11目錄:
./configure CC=arm-hisiv500-linux-gcc --host=arm-hisiv500-linux
- 1
若上述過程成功,會在/usr/local目錄下生成相應文件:
在/usr/local目錄下執行tree -L 2
(ps:有時間要研究下tree命令),結果如下:
.
├── bin
│ ├── freetype-config
│ └── sdl-config
├── etc
├── games
├── include
│ ├── freetype2
│ ├── ft2build.h
│ └── SDL
├── lib
│ ├── libfreetype.a
│ ├── libfreetype.la
│ ├── libfreetype.so -> libfreetype.so.6.9.0
│ ├── libfreetype.so.6 -> libfreetype.so.6.9.0
│ ├── libfreetype.so.6.9.0
│ ├── libSDL-1.2.so.0 -> libSDL-1.2.so.0.11.4
│ ├── libSDL-1.2.so.0.11.4
│ ├── libSDL.a
│ ├── libSDL.la
│ ├── libSDLmain.a
│ ├── libSDLmain.la
│ ├── libSDL.so -> libSDL-1.2.so.0.11.4
│ ├── libSDL_ttf-2.0.so.0 -> libSDL_ttf-2.0.so.0.10.1
│ ├── libSDL_ttf-2.0.so.0.10.1
│ ├── libSDL_ttf.a
│ ├── libSDL_ttf.la
│ ├── libSDL_ttf.so -> libSDL_ttf-2.0.so.0.10.1
│ ├── pkgconfig
│ ├── python2.7
│ └── python3.5
├── man -> share/man
├── sbin
├── share
│ ├── aclocal
│ ├── ca-certificates
│ ├── emacs
│ ├── fonts
│ ├── man
│ ├── sgml
│ └── xml
└── src
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 拷貝生成sdl庫
mkdir -C /opt/sdl_lib
cd /opt/sdl_lib
cp /usr/local/include/ ./ -rf
cp /usr/local/lib/ ./ -rf
- 1
- 2
- 3
- 4
測試
ps:這個程序不是我寫的,感謝作者Sues
/*************************************************************************
> File Name: test.c
> Author: Sues
> Mail: [email protected]
> Created Time: 2017年02月28日 星期二 21時47分05秒
************************************************************************/
#include <stdio.h>
#include "SDL.h"
#include "SDL_ttf.h"
int main(int argc, const char *argv[])
{
char * pstr = "hello";
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("./simhei.ttf", 48);
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, pstr, 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);
SDL_SaveBMP(temp, "save.bmp");
free(fmt);
SDL_FreeSurface(text);
SDL_FreeSurface(temp);
TTF_CloseFont(font);
TTF_Quit();
return 0;
}
編譯命令:
arm-hisiv500-linux-gcc test.c `sdl-config --cflags --libs` -I/opt/sdl_lib/include -I/opt/sdl_lib/include/SDL -L/opt/sdl_lib/lib -lSDL -lSDL_ttf -Wl,-rpath -o test
- 1
在開發板上執行test,會生成save.bmp,打開後可以發現是Hello!
注意:執行需要
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/sdl_lib/lib #/opt/sdl_lib/lib目錄是我存放動態庫文件的地方
# 同時需要在test文件下防止simhei.ttf文件,這樣才能找到字體
- 1
- 2
總結
參考的是如下博主的資源,感謝這位博主的分享!
參考鏈接
番外
因爲BMP圖片不能設置透明,所以顯示的圖在視頻幀上會導致視頻的背景是黑色的,而且無法去除。這個問題我糾結了好久,最後也是在易百納論壇找到的解決方法!
重點在於zhuangweiye大神的回答:
s32Ret = SAMPLE_RGN_UpdateCanvas("sys_time.bmp", &stBitmap, HI_TRUE, 0x8000, &stSize, stCanvasInfo.u32Stride, stRgnAttrSet.unAttr.stOverlayEx.enPixelFmt);
- 1
- 2
有時間再把區域+SDL的方法顯示位圖這一部分搞上來,暫時還是寫寫編譯的東西吧!