Buildroot 移植 freetype 到 Jz2440

本文是在Buildroot 构建根文件系统(Jz2440)的基础上添加 freetype 第三方软件库,以便在 Jz2440 开发板LCD使用 freetype 显示文字。

第 1 步: 在 buildroot 顶层目录输入 make menuconfig 命令,进入配置界面,配置如下:

Target packages
	->Libraries
		->Graphics
			->[*] freetype

第2步:输入 make 继续编译 buildroot(一次编译成功)(注:buildroot 自动下载的 freetype 版本为 freetype-2.10.4.tar.xz)

第3步:把 buildroot-2020.02.9/output/images 目录下的 rootfs.tar 拷贝到 nfs 网络文件系统,通过 nfs 方式挂载进行测试:

cp rootfs.tar ~/works/nfs/rootfs
cd ~/works/nfs/rootfs
tar xf rootfs.tar
rm -rf rootfs.tar

第 4 步:重启开发板,挂载新的文件系统,文件系统挂成功后,搜索 freetype 相关的文件,结果如下图所示:
在这里插入图片描述
由上图可知,已把 freetype 相关的动态库添加到了根文件系统的 /usr/lib 目录。

第 5 步:很多时候,我们编译自己的应用程序时,都是使用系统的检查编译器的,所以我们需要将 buildroot 编译处理的 freetype 相关的头文件和动态库文件复制到系统的编译器目录下:
(1) 在 buildroot 目录搜索 freetype 相关的头文件:

find -name "freetype*"

搜索结果如下图所示:
在这里插入图片描述
继续输入如下命令,查看 freetype2 还有那些文件:

ls ./output/host/arm-buildroot-linux-gnueabi/sysroot/usr/include/freetype2/*

结果显示如下:
在这里插入图片描述
可见,freetype2 目录还有 ft2build.h 头文件,freetype 目录下还有其他很多的头文件。因此,我们可以直接把 freetype2 整个目录复制打 arm-linux-gcc 交叉编译的 /tools/arm-linux-gcc-4.4.3/lib/gcc/arm-none-linux-gnueabi/4.4.3/include 目录:

cp ./output/host/arm-buildroot-linux-gnueabi/sysroot/usr/include/freetype2 /tools/arm-linux-gcc-4.4.3/lib/gcc/arm-none-linux-gnueabi/4.4.3/include -rf

然后,跳转到 /tools/arm-linux-gcc-4.4.3/lib/gcc/arm-none-linux-gnueabi/4.4.3/include 目录,把 freetype2 目录的 ft2build.h 头文件 和 freetype 移动到当前的 include 目录下,否则,编译应用程序时会出现错误:error: ft2build.h: No such file or directory

cd /tools/arm-linux-gcc-4.4.3/lib/gcc/arm-none-linux-gnueabi/4.4.3/include
sudo mv freetype2/ft2build.h  .
sudo mv freetype2/freetype .
sudo rm -rf freetype2

(2) 在 buildroot 目录搜索 freetype 相关的动态库文件:

find -name "*freetype*so*"

搜索结果如下图所示:
在这里插入图片描述
可以见,freetype 相关的动态库有上图红色框的这三个。我们把它们复制到 arm-linux-gcc 交叉编译的 /tools/arm-linux-gcc-4.4.3/arm-none-linux-gnueabi/lib 目录下:

sudo cp ./output/host/arm-buildroot-linux-gnueabi/sysroot/usr/lib/libfreetype*so* /tools/arm-linux-gcc-4.4.3/arm-none-linux-gnueabi/lib -rfd

头文件和库文件都复制完毕了,我们尝试重新编译程序,出现了如下错误:warning: libz.so.1,导致编译失败。

/tools/arm-linux-gcc-4.4.3/bin/../lib/gcc/arm-none-linux-gnueabi/4.4.3/../../../../arm-none-linux-gnueabi/bin/ld: warning: libz.so.1, needed by /tools/arm-linux-gcc-4.4.3/bin/../lib/gcc/arm-none-linux-gnueabi/4.4.3/../../../../arm-none-linux-gnueabi/lib/libfreetype.so, not found (try using -rpath or -rpath-link)

libz.so.1 看文件的格式,应该是一个动态库,接下来我们回到 buildroot 目录搜索该文件:

find -name "libz.so.1"

搜索结果如下:
在这里插入图片描述
使用 flie 命令查看一下该文件,发现这只是一个链接文件,真正的库文件是 libz.so.1.2.11
在这里插入图片描述
因为我们需要把这两个文件也拷贝到交叉编译器的 lib 目录:

sudo cp ./output/host/arm-buildroot-linux-gnueabi/sysroot/usr/lib/libz.so* /tools/arm-linux-gcc-4.4.3/arm-none-linux-gnueabi/lib -rfd

重新编译 freetype 相关的应用程序,编译成功。
注:关于 buildroot 下的 host 目录的作用,可以查看:https://blog.csdn.net/kunkliu/article/details/84297260; 关于添加 freetype 相关的头文件和库到交叉编译器可以查看:https://blog.csdn.net/qq_35031421/article/details/107970711的 “3. 在JZ2440开发板LCD显示矢量字体” 章节。

第 6 步:使用 数码相框(五、使用freetype库在LCD显示几行文字)里的程序进行测试,把编译好的测试程序拷贝到开发板的根文件系统,执行 ./show_more_lines simsun.ttc 命令(注:如果没有安装LCD驱动,需要提前安装好LCD驱动)显示结果如下:
在这里插入图片描述
可以,使用 buildroot 交叉编译移植 freetype 成功。

猜你喜欢

转载自blog.csdn.net/qq_35031421/article/details/113433921
今日推荐