freetype矢量字体 —— 环境安装篇

思路

使用交叉编译器编译freetype库源码,将得到的头文件和库文件拷贝到交叉编译器所在目录,从而进行安装。

编译环境

  • 交叉编译器:arm-linux-gnueabihf-gcc (gcc version 6.2.1 20161016 (Linaro GCC 6.2-2016.11))
  • EVK(评估板)型号:100ASK_IMX6ULL_PRO
  • SOC 型号:IMX6ULL
  • 运行系统:Linux version 4.9.88
  • freetype库版本:2.10.2

Linaro GCC编译器下载地址:
https://releases.linaro.org/components/toolchain/binaries/6.2-2016.11/arm-linux-gnueabihf/

由于我的PC是Win10x64,安装的系统Ubuntu 14都是64bit的,因此下载64bit版本;

32位系统版本:gcc-linaro-6.2.1-2016.11-i686_arm-linux-gnueabihf.tar.xz
64位系统版本:gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf.tar.xz

安装freetype库所需安装包(建议版本):
freetype-2.10.2.tar.xz (官网:freetype page
libpng-1.6.37.tar.xz (官网:libpng page
zlib-1.2.11.tar.gz (官网:zlib page

注:由于我的IMX6ULL EVK安装的工具链属于精简版("arm-linux-gnueabihf-"前缀),而非基于buildroot的比较完善的版本(arm-buildroot-linux-gnueabihf-前缀),因而没有安装zlib,需要手动安装。


为IMX6ULL交叉编译freetype

设置交叉编译器

为了对所有用户生效,修改PC上Linux的全局环境变量配置文件/etc/profile(也可以修改其他环境变量配置文件,对当前用户生效),在文件末尾添加以下内容:

# set Linux build tools path for IMX6
export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabihf-
export PATH=$PATH:/home/martin/100ask_imx6ull-sdk/ToolChain/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/bi

修改完成后,别忘了重新加载配置文件

$ source /etc/profile

测试、验证交叉编译器工具链arm-linux-gnueabihf-gcc,执行下面命令:

$ echo 'main(){}' | arm-linux-gnueabihf-gcc -E -v -

如果报错,说明没有配置成功或者没有使其生效。
如果成功,会看到工具链相关的目录以及版本信息。

可以从测试结果,确认交叉编译器默认搜索的的头文件的系统目录为:

/home/martin/100ask_imx6ull-sdk/ToolChain/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/bin/../lib/gcc/arm-linux-gnueabihf/6.2.1/include

/home/martin/100ask_imx6ull-sdk/ToolChain/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/bin/../lib/gcc/arm-linux-gnueabihf/6.2.1/include-fixed

/home/martin/100ask_imx6ull-sdk/ToolChain/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/bin/../lib/gcc/arm-linux-gnueabihf/6.2.1/../../../../arm-linux-gnueabihf/include

/home/martin/100ask_imx6ull-sdk/ToolChain/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/bin/../arm-linux-gnueabihf/libc/usr/include

通常,选最后一个作为用户自定义的头文件系统目录,也就是说,.h文件拷贝到该目录。

交叉编译器默认搜索的的库文件的系统目录:

/home/martin/100ask_imx6ull-sdk/ToolChain/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/bin/../lib/gcc/arm-linux-gnueabihf/6.2.1/

/home/martin/100ask_imx6ull-sdk/ToolChain/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/bin/../lib/gcc/arm-linux-gnueabihf/

/home/martin/100ask_imx6ull-sdk/ToolChain/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/bin/../lib/gcc/

/home/martin/100ask_imx6ull-sdk/ToolChain/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/bin/../lib/gcc/arm-linux-gnueabihf/6.2.1/../../../../arm-linux-gnueabihf/lib/

/home/martin/100ask_imx6ull-sdk/ToolChain/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/bin/../arm-linux-gnueabihf/libc/lib/

/home/martin/100ask_imx6ull-sdk/ToolChain/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/bin/../arm-linux-gnueabihf/libc/usr/lib/

类似地,选最后一个作为用户自定义的库文件系统目录。也就是说,.a/.so文件拷贝到该目录。

交叉编译、安装zlib

freetype依赖于libpng,而libpng依赖于zlib,所以需要先编译、安装zlib。命令如下:

$ tar xzf zlib-1.2.11.tar.gz
$ cd zlib-1.2.11
$ ./configure --prefix=$PWD/tmp
$ make
$ make install
$ cd tmp

# 将编译生成的头文件拷贝到工具链的头文件系统目录
$ cp include/* -rf /home/martin/100ask_imx6ull-sdk/ToolChain/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/bin/../arm-linux-gnueabihf/libc/usr/include

# 将编译生成的库文件拷贝到工具链的库文件系统目录
$ cp lib/* -rfd /home/martin/100ask_imx6ull-sdk/ToolChain/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/bin/../arm-linux-gnueabihf/libc/usr/lib/

注:系统目录需要根据PC上编译器的实际目录,来决定。

交叉编译、安装libpng

命令如下:

$ tar xJf libpng-1.6.37.tar.xz # 注意不同格式压缩文件, 解压命令不一样
$ cd libpng-1.6.37
$ ./configure --host=arm-linux-gnueabihf --prefix=$PWD/tmp
$ make
$ make install
$ cd tmp

# 将编译生成的头文件拷贝到工具链的头文件系统目录
$ cp include/* -rf /home/martin/100ask_imx6ull-sdk/ToolChain/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/bin/../arm-linux-gnueabihf/libc/usr/include

# 将编译生成的库文件拷贝到工具链的库文件系统目录
$ cp lib/* -rfd /home/martin/100ask_imx6ull-sdk/ToolChain/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/bin/../arm-linux-gnueabihf/libc/usr/lib/

注:--host指定交叉编译工具链前缀,如果不指定,默认使用系统自带的gcc编译器。
--prefix指定编译后生成的文件(头文件、库文件等)的安装目录,如果不指定,默认使用系统/usr/local/include和/usr/local/lib目录。

交叉编译、安装freetype

命令如下:

$ tar xJf freetype-2.10.2.tar.xz
$ cd freetype-2.10.2
$ ./configure --host=arm-linux-gnueabihf --prefix=$PWD/tmp
$ make
$ make install
$ cd tmp

# 将编译生成的头文件拷贝到工具链的头文件系统目录
$ cp include/* -rf /home/martin/100ask_imx6ull-sdk/ToolChain/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/bin/../arm-linux-gnueabihf/libc/usr/include

# 将编译生成的库文件拷贝到工具链的库文件系统目录
$ cp lib/* -rfd /home/martin/100ask_imx6ull-sdk/ToolChain/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/bin/../arm-linux-gnueabihf/libc/usr/lib/

修改freetype头文件安装位置

编译出的freetype头文件,会安装到include/freetyp2/freetype目录下面,也就是说,如果要使用freetype库,C程序中需要这样包含头文件:

#include <freetype2/ft2build.h>

这跟所有的freetype例程是冲突的。因为例程是这样包含头文件的:

#include <ft2build.h>

为了方便测试和使用,我们将include/freetyp2/* 复制到上一级目录:

$ cd /home/martin/100ask_imx6ull-sdk/ToolChain/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/bin/../arm-linux-gnueabihf/libc/usr/include/
$ mv freetype2/* ./

测试、验证freetype库安装

测试、验证freetype库是否编译、安装OK,可以见 freetype矢量字体 —— 介绍篇

或者,直接编译用于显示字体的c程序:
完整源代码参见:freetype_show_font.c | gitee


小结

1)configure构建的项目
configure是autotools生成的项目构建脚本,特点是在项目根目录下存在一个configure文件。编译、安装开源软件的惯用方式:

$ ./configure
$ make
$ make install

configure的选项:
--host:指定编译程序的交叉编译器;
--prefix:指定安装目录;

可以使用下面命令,查看所有支持的选项。

$ ./configure --help

2)库链接

编译源码时,需要链接库文件,使用"-l"然后加上需要链接的库名称。如链接freetype,就要在编译指令后加上"-lfreetype"选项。

posted @ 2022-09-02 21:59  明明1109  阅读(1483)  评论(0编辑  收藏  举报