由于移植了tslib,jpeg,zlib后才想起做笔记,所以这里只记录移植libpng和freetype的过程
–本机使用环境–
windows 11
VSCode+Docker快速搭建Linux C++开发环境
在docker中拉取了B站up的镜像:
在Mac和Windows下使用VSCode+Docker快速搭建Linux C++开发环境
正点原子IMX6ULL
MobaXterm作为串口连接工具
交叉编译器使用的是neon-poky-linux-gnueabi
libpng移植
移植前需要移植zlib库,这里不做介绍
接着我们开始移植libpng
首先下载libpng源码包,进入https://github.com/glennrp/libpng/releases
我下载了最新的libpng-1.6.43.tar.gz
放入了docker与windows的共享文件夹中
在解压前,在自己的linux容器中创建好安装位置
这里我使用了/home/tools/libpng 作为安装目录
接着解压
tar -xzf libpng-1.6.43.tar.gz
解压后进入解压出来的文件夹
接下来配置交叉编译器
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=“
L
D
F
L
A
G
S
−
L
/
h
o
m
e
/
d
t
/
t
o
o
l
s
/
z
l
i
b
/
l
i
b
"
e
x
p
o
r
t
C
F
L
A
G
S
=
"
{LDFLAGS} -L/home/dt/tools/zlib/lib" export CFLAGS="
LDFLAGS−L/home/dt/tools/zlib/lib"exportCFLAGS="{CFLAGS} -I/home/dt/tools/zlib/include”
export CPPFLAGS=“${CPPFLAGS} -I/home/dt/tools/zlib/include”
接着配置:
./configure --prefix=/home/tools/libpng/ --host=arm-poky-linux-gnueabi
== --prefix选项指定libpng的安装目录,将家目录下的tools/png作为libpng的安装目录。==
后面就简简单单的
make
make install
安装完打开安装目录查看是否有4个文件夹生成,有即安装成功
接下来要把linux容器中的bin,include,lib这三个文件夹拷贝到imx6ull中的/usr/目录中
注意不要直接拷贝,因为lib文件夹中有链接文件,直接拷贝可能会让链接丢失,所以我一般把他们压缩成tar.gz再拷贝过去解压
我将3个文件夹压缩后放入了共享文件夹中,方便在windows中拿取:
接着通过串口工具拷贝到imx6ull中:
因为的的imx6ull之前安装过老版本的libpng,所以我在植入前需要删除老版本:
rm -rf /lib/libpng* /usr/lib/libpng*
接下来我使用了正点原子的测试用例:
在我这个环境中还需要改一下传递值:
将mmap()函数强制转换一下即可.
执行:
${CC} -o Png png.cpp -I/home/tools/png/include -L/home/tools/png/lib -L/home/tools/zlib/lib -lpng -lz
运行交叉编译器后生成了Png文件,将Png文件拷贝到imx6uLL中
最后执行一下测试文件:./Png 123.png
我图片太大了只显示了一部分,但显示成功拉,移植成功
freetype移植
其实和上面的步骤一模一样,进入下载链接
https://mirrors.sarata.com/non-gnu/freetype/
我下载了最新的2.13.1
在linux容器中解压,
配置,编译,安装
./configure --prefix=/home/tools/freetype/ --host=arm-poky-linux-gnueabi --with-zlib=yes --with-bzip2=no --with-png=yes --with-harfbuzz=no ZLIB_CFLAGS=“-I/home/tools/zlib/include -L/home/tools/zlib/lib” ZLIB_LIBS=-lz LIBPNG_CFLAGS=“-I/home/tools/libpng/include -L/home/tools/libpng/lib” LIBPNG_LIBS=-llibpng
这里具体的意思可以通过./configure --help或者百度来查看,总的意思就是开启zlib库和libpng库,同时指定这两个库的安装位置
make
make install
这里发现新的freetype安装后不会有bin文件夹,我实测不会对显示文字有影响
然后就把include文件夹和lib文件夹分别拷贝到imx6ull中的/usr/include和/usr/lib/
最后同样使用了正点原子的测试用例
用下面的语句来编译:
${CC} -o testApp testApp.c -I/home/tools/freetype/include/freetype2 -L/home/tools/freetype/lib -lfreetype -L/home/tools/zlib/lib -lz -L/home/tools/png/lib -lpng -lm
编译成功后拷贝到imx6ull中
运行指令如下:
测试无误显示成功!