一、前言
为了能够在lcd显示矢量字体,需要交叉编译freetype库。该过程大致分为3步:
- 交叉编译库
- 在主机上的交叉编译工具链的目录下,安装头文件,和库文件
- 在ARM板子的/lib,/usr/lib安装so文件
二、环境
- ubuntu 20.04.1
- 交叉编译工具链为arm-linux-gnueabihf-
三、freetype依赖
freetype依赖于libpng,libpng又依赖于zlib,
所以我们应该:先编译安装zlib,再编译安装libpng,最后编译安装freetype。但是,有些工具链里有zlib, 那就不用编译安装zlib.
四、交叉编译步骤
1. 确定头文件、库文件在工具链中的目录
输入命令
echo 'main(){}'| arm-linux-gnueabihf-gcc -E -v -
然后找到这一部分,确定其中一个为头文件目录,我选择第一个:
/usr/local/arm/arm-linux-guneabihf/lib/gcc/arm-linux-gnueabihf/4.9.4/include
下滑找到下图红色部分,我确定最后一个
作为存放库目录:
/usr/local/arm/arm-linux-guneabihf/arm-linux-gnueabihf/libc/usr/lib
2. 交叉编译zlib库
[daiboo@daiboo]:~/codes/0_linux_project/electronic_book/electronic_book$ ls
02_dot_font 03_freetype libpng-1.6.37 libpng-1.6.37.tar.xz zlib-1.2.11.tar.gz
[daiboo@daiboo]:~/codes/0_linux_project/electronic_book/electronic_book$ tar -xf zlib-1.2.11.tar.gz
输入 ./configure --prefix=$PWD/tmp
修改Makefile的内容,主要是把gcc改成arm-linux-gnueabihf-gcc
CC=arm-linux-gnueabihf-gcc
CFLAGS=-O3 -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN
#CFLAGS=-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7
#CFLAGS=-g -DZLIB_DEBUG
#CFLAGS=-O3 -Wall -Wwrite-strings -Wpointer-arith -Wconversion \
# -Wstrict-prototypes -Wmissing-prototypes
SFLAGS=-O3 -fPIC -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN
LDFLAGS=
TEST_LDFLAGS=-L. libz.a
LDSHARED=arm-linux-gnueabihf-gcc -shared -Wl,-soname,libz.so.1,--version-script,zlib.map
CPP=arm-linux-gnueabihf-gcc -E
STATICLIB=libz.a
SHAREDLIB=libz.so
SHAREDLIBV=libz.so.1.2.11
SHAREDLIBM=libz.so.1
LIBS=$(STATICLIB) $(SHAREDLIBV)
AR=ar
ARFLAGS=rc
RANLIB=ranlib
LDCONFIG=ldconfig
LDSHAREDLIBC=-lc
TAR=tar
SHELL=/bin/sh
EXE=
prefix =/home/daiboo/codes/0_linux_project/electronic_book/electronic_book/zlib-1.2.11/tmp
exec_prefix =${prefix}
libdir =${exec_prefix}/lib
sharedlibdir =${libdir}
includedir =${prefix}/include
mandir =${prefix}/share/man
man3dir = ${mandir}/man3
pkgconfigdir = ${libdir}/pkgconfig
SRCDIR=
ZINC=
ZINCOUT=-I.
然后执行make
接着执行make install
执行了之后就会生成tmp文件
我们需要把tmp文件下的include,lib文件下的内容移动到前面步骤1中确定的头文件、库文件目录
参考执行命令如下:
sudo cp tmp/include/* /usr/local/arm/arm-linux-guneabihf/lib/gcc/arm-linux-gnueabihf/4.9.4/include -rf
sudo cp -rfd tmp/lib/* /usr/local/arm/arm-linux-guneabihf/arm-linux-gnueabihf/libc/usr/lib
至此,在交叉编译工具链中安装了zlib库
3 .交叉编译、安装libpng
freetype依赖于libpng,所以需要先编译、安装libpng。命令如下:
[daiboo@daiboo]:~/codes/0_linux_project/electronic_book/electronic_book$ ls
02_dot_font 03_freetype libpng-1.6.37 libpng-1.6.37.tar.xz zlib-1.2.11.tar.gz
[daiboo@daiboo]:~/codes/0_linux_project/electronic_book/electronic_book$ tar xJf libpng-1.6.37.tar.xz
[daiboo@daiboo]:~/codes/0_linux_project/electronic_book/electronic_book$ ls
02_dot_font 03_freetype libpng-1.6.37 libpng-1.6.37.tar.xz
[daiboo@daiboo]:~/codes/0_linux_project/electronic_book/electronic_book$ cd libpng-1.6.37/
然后输入以下参考命令
./configure --host=arm-linux-gnueabihf --prefix=$PWD/tmp
make
make install
sudo cp tmp/include/* /usr/local/arm/arm-linux-guneabihf/lib/gcc/arm-linux-gnueabihf/4.9.4/include -rf
sudo cp -rfd tmp/lib/* /usr/local/arm/arm-linux-guneabihf/arm-linux-gnueabihf/libc/usr/lib
4.交叉编译、安装freetype
tar xf freetype-2.10.2.tar.xz
mv freetype-2.10.2 freetype-2.10.2_arm // 这里改了下名字
cd freetype-2.10.2_arm
./configure --host=arm-linux-gnueabihf --prefix=$PWD/tmp
make
make install
sudo cp tmp/include/* /usr/local/arm/arm-linux-guneabihf/lib/gcc/arm-linux-gnueabihf/4.9.4/include -rf
sudo cp -rfd tmp/lib/* /usr/local/arm/arm-linux-guneabihf/arm-linux-gnueabihf/libc/usr/lib
至此交叉编译freetype完成