文章目录
zlib 移植
zlib 其实是一套包含了数据压缩算法的函式库,此函数库为自由软件, 是一套免费、开源的 C 语言函数库,所以我们可以获取到它源代码。libpng 依赖于 zlib 库, 所以要想移植 libpng 先得移植 zlib 库才可以, zlib 也好、 libpng 也好,其实移植过程非常简单,无非就是下载源码、编译源码这样的一些工作,那本小节就向大家介绍如何移植 zlib
1.下载源码包
我们可以进入到 https://www.zlib.net/fossils/这个链接地址下载 zlib 源码包:
2.编译源码
创建目录zlib,将获取到的源码放到该目录,并创建install目录来存放编译生成的文件。
将下载的 zlib-1.2.10.tar.gz 压缩文件拷贝到 Ubuntu 系统的用户家目录下,然后将其解压开:
tar -xzf zlib-1.2.10.tar.gz
解压之后就会得到 zlib-1.2.10 文件夹,这就是 zlib 的源代码目录。
接着我们进入到 zlib 的源码目录 zlib-1.2.10,如下所示:
同样也是执行三部曲:配置、编译、安装,一套流程下来就 OK 了!
在此之前,先对交叉编译工具的环境进行初始化,使用 source 执行交叉编译工具安装目录下的environment-setup-cortexa7hf-neon-poky-linux-gnueabi 脚本文件(如果已经初始化过了,那就不用再进行初始化了):
source /opt/fsl-imx-x11/4.1.15-2.1.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi
执行下面这条命令对 zlib 工程进行配置:
./configure --prefix=/home/alientek/tools/zlib/install/
–prefix 选项指定 zlib 库的安装目录,将家目录下的 tools/zlib/install/作为 zlib库的安装目录。
配置完成之后,直接 make 编译:
make
编译完成之后,接着执行 make install 安装即可!
make install
3.安装目录下的文件夹介绍
进入到 zlib 库的安装目录:
头文件目录 include 以及库文件目录 lib。
至此, zlib 库就已经编译好了,接下来我们需要把编译得到的库文件拷贝到开发板。
4.移植到开发板
进入到 zlib 安装目录下,将 lib 目录下的所有动态链接库文件拷贝到开发板 Linux 系统/usr/lib 目录;注意在拷贝之前,需要先将出厂系统中原有的 zlib 库文件删除, 在开发板 Linux 系统下执行命令:
rm -rf /usr/lib/libz.* /lib/libz.*
删除之后,再将我们编译得到的 zlib 库文件拷贝到开发板/usr/lib 目录, 拷贝库文件时,需要注意符号链接的问题,不能破坏原有的符号链接。
拷贝过去之后,开发板/usr/lib 目录下就应该存在这些库文件,如下所示:
libpng 移植
移植好 zlib 库之后,接着我们开始移植 libpng。
1.下载源码包
首先下载 libpng 源码包,进入https://github.com/glennrp/libpng/ 链接地址,如下:
http://ftp-osl.osuosl.org/pub/libpng/src/libpng16/
2.编译源码
将下载的 libpng-1.6.35.tar.gz 压缩包文件拷贝到 Ubuntu 家目录下,接着将其解压:
tar -xzf libpng-1.6.35.tar.gz
解压之后得到 libpng-1.6.35 文件夹,这便是 libpng 的源码目录。
在编译 libpng 之前,先在 libpng 目录下创建一个名为 install 的文件夹,作为 libpng 库的安装目录:
接着我们进入到 libpng 源码目录下,同样也是执行三部曲:配置、编译、安装,一套流程下来就 OK 了!
在此之前,先对交叉编译工具的环境进行初始化,使用 source 执行交叉编译工具安装目录下的environment-setup-cortexa7hf-neon-poky-linux-gnueabi 脚本文件(如果已经初始化过了,那就不用再进行初始化了):
source /opt/fsl-imx-x11/4.1.15-2.1.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi
libpng 依赖于 zlib 库,前面我们已经将 zlib 库编译成功了,但是我们得告知编译器 zlib 库的安装目录,这样编译器才能找到 zlib 的库文件以及头文件,编译 libpng 的时才不会报错。
执行下面这三条命令,将 zlib 库安装目录下的 include 和 lib 路径导出到环境变量:
export LDFLAGS="${LDFLAGS} -L/usr/local/lib" export CFLAGS="${CFLAGS} -I/usr/local/include" export CPPFLAGS="${CPPFLAGS} -I/usr/local/include"
接着执行下面这条命令对 libpng 源码工程进行配置:
./configure --prefix=/home/alientek/tools/libpng/install/ --host=arm-poky-linux-gnueabi
–prefix 选项指定 libpng 的安装目录,将家目录下的 tools/libpng/install作为 libpng 的安装目录。
接着执行 make 进行编译:
make
最后执行 make install 安装即可!
make install
3.安装目录下的文件夹介绍
进入到 libpng 安装目录
同样包含了 bin、 include、 lib 这些目录。
4.移植到开发板
进入到 libpng 安装目录,将 bin 目录下的所有测试工具拷贝到开发板 Linux 系统/usr/bin 目录;将 lib 目录下的所有库文件拷贝到 Linux 系统/usr/lib 目录,注意在拷贝之前,先将开发板出厂系统中已经移植好的libpng 库文件删除,执行下面这条命令:
rm -rf /lib/libpng* /usr/lib/libpng*
删除之后,再将编译得到的 libpng 库文件拷贝到开发板/usr/lib 目录,拷贝库文件时,需要注意符号链接的问题,不能破坏原有的符号链接。
拷贝过去之后,开发板/usr/lib 目录下就应该存在这些库文件,如下所示:
freetype 移植
1.下载 FreeType 源码
开发板出厂系统中, FreeType 的版本为 2.6,这个版本稍微有点低,我们选择移植 2.8 版本的 FreeType。进入到 https://download.savannah.gnu.org/releases/freetype/链接地址,如下所示:
2. 交叉编译 FreeType 源码
将下载好的 freetype-2.8.tar.gz 压缩文件拷贝到 Ubuntu 系统的用户家目录下
执行命令将 freetype-2.8.tar.gz 解压开来:
tar -xzf freetype-2.8.tar.gz
解压成功之后便会得到 FreeType 的源码目录 freetype-2.8。
进入到 freetype-2.8 目录,老规矩,同样是三部曲:配置、编译、安装。首先对交叉编译工具的环境进行初始化,前面章节内容已经提过很多次了,使用交叉编译器之前,必须要对其环境进行初始化(如果当前终端已经初始化过了,则无需再次进行初始化)。
FreeType 库基于模块化设计,意味着我们可以对其进行裁剪,将不需要的功能模块从配置中移除,减小库文件的体积;除此之外, FreeType 还支持很多配置选项, 如果大家想要对 FreeType 做一些自定义配置或者对其进行裁剪,可以参考 FreeType 源码目录下 docs/CUSTOMIZE 文档,该文件对此有比较详细的说明,建议大家看一看,如果有需求的话。 docs 目录下还有其它很多的说明文档, 也都可以读一读。
这里我们简单地配置一下,打开 include/freetype/config/ftoption.h 文件,如下所示:
vi include/freetype/config/ftoption.h
该文件定义了很多的配置宏,我们可以选择使能或禁用这些配置选项,具体配置哪些功能,大家自己去研究,每一个配置宏都有详细地解释说明。 这里我们打开以下两个配置宏:
#define FT_CONFIG_OPTION_SYSTEM_ZLIB #define FT_CONFIG_OPTION_USE_PNG
找到这两个宏,默认情况下,这两个都被注释掉了,所以是没有使能的; 把这两个宏的注释去掉,使能这两个配置宏。
第一个配置宏表示使用系统安装的 zlib 库,因为 FreeType 支持 Gzip 压缩文件,会使用到 zlib 库, zlib之前我们移植好了;第二个配置宏表示支持 PNG bitmap 位图,因为 FreeType 可以加载 PNG 格式的彩色位图字形,需要依赖于 libpng 库,这个库前面我们也是移植好了。
配置好之后,保存、退出 ftoption.h 文件,接着执行如下命令对 FreeType 工程源码进行配置:
./configure --prefix=/home/alientek/tools/freetype/install/ --host=arm-poky-linux-gnueabi --with-zlib=yes --with-bzip2=no --with-png=yes --with-harfbuzz=no ZLIB_CFLAGS="-I/usr/local/include -L/usr/local/lib" LIBPNG_LIBS=-lpng
配置完成之后接着执行 make 编译,编译完成之后执行 make install 安装即可!
3.安装目录下的文件
进入到 FreeType 安装目录下,如下所示:
同样有 bin 目录、 include 目录以及 lib 目录,大家可以自己进入到这些目录下,浏览下这些目录下的有哪些文件,对此有个印象。
如果要使用 FreeType 库,我们需要在应用程序源码中包含 include/freetype2 目录下的 ft2build.h 头文件,除此之外,还需要包含另一个头文件 FT_FREETYPE_H,这是一个用宏定义的头文件,其实就是include/freetype2/freetype/freetype.h 头文件。
所以,在我们的应用程序一般是这样写:
#include <ft2build.h> #include FT_FREETYPE_H
4.移植到开发板
接下来将编译得到的动态链接库文件拷贝到开发板 Linux 系统/usr/lib 目录,在拷贝之前,需将/usr/lib 目录下原有的 FreeType 库文件删除掉,执行下面这条命令:
rm -rf /usr/lib/libfreetype.*
删除之后,再将我们编译得到的库文件拷贝到开发板/usr/lib 目录下,也就是 FreeType 安装目录 lib 目录下的所有库文件,拷贝的时候注意符号链接的问题。拷贝完成之后,如下所示: