分类: 嵌入式
2013-01-16 14:15:37
1. 制作交叉编译工具
tar xjf freetype-2.4.10.tar.bz2
./configure --host=arm-linux
make
make DESTDIR=$PWD/tmp install // ($PWD 代表当前目录) cd /tmp 会生成 usr 目录
/*一般查找安装到那个库的方法*/
(1)echo $PATH
(2)find -name include (查头文件)
find -name stdio.h
(3)find -name lib (查库文件)
编译出来的头文件应该放入:
/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include
编译出来的库文件应该放入:
/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib
1.1 拷贝库到ARM的根文件系统
把tmp/usr/local/lib/* 复制到 /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib
sudo cp * /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib -d -rf
cp *so* /work/nfs_root/fs_mini_mdev_new/lib -d
把tmp/usr/local/include/* 复制到 /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include
sudo cp * /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include -rf
至此如果编译应用程序,将会出现错误,需执行下面1.2
1.2
cd /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include
sudo mv freetype2/freetype . (因为没有freetype2.h 所以给他移动到当前库位置)
2. 编译应用程序
2.1 编译example1.c
arm-linux-gcc -finput-charset=GBK -o example1 example1.c -lfreetype -lm
./example1 ./simsun.ttc
出现错误:因为没有把字体文件拷贝过去
Uniocde:
0x97e6 0x67 0x69 0x66
Segmentation fault
3.1 编译dot_font.c
arm-linux-gcc -finput-charset=GBK -o dot_font dot_font.c -lfreetype -lm
./dot_font ./simsun.ttc
就这样编译时将会出现如下错误信息:
cc1: error: failure to convert GBK to UTF-8
分析步骤:
1. man gcc
2.搜索 /charset 的应用方法,知道charset可支持任何能被iconv 转换的编码
3.所以搜索 iconv --help 看iconv 的用法
4.可以知道 iconv的 -f 从那种码 -t 输出那种码
5.iconv用法的格式:iconv -f GBK -t UTF-8 xxx(要转换的文件)
6.进制转换,看哪里转换不过去。
iconv -f GBK -t UTF-8 dot_font.c
arm-linux-gcc -finput-charset=GBK -fexec-charset=GBK -o dot_font dot_font.c -lfreetype -lm
# ./dot_font ./simsun.ttc
chinese code: d6 d0
here1
here2
Segmentation fault
运行到此出现上面的段错误: slot = face->glyph;
重新下载内核和刷新simsun.ttc 后,运作上面的就可以运行了。