概述
libpng是一款C语言编写的比较底层的读写PNG文件的跨平台的库。由于依赖于zlib库,所以在安装libpng时往往还需要安装zlib库。
库版本的选择与下载
zlib库和libpng库的下载地址:https://jaist.dl.sourceforge.net/project/libpng/
libpng库下载的版本为:libpng-1.6.37
zlib库下载的版本为:zlib-1.2.11
安装zlib和libpng
由于某些系统可能自带或者在安装其他应用时就装上了zlib,为了避免安装的libpng与系统本身自带的zlib(安装在系统的路径为:/usr/local/lib)有冲突,所以创建一个文件夹用于安装libpng与zlib。
首先将两个压缩包放在同一个路径下
目录结构如图所示:
安装zlib库
tar -zxvf zlib-1.2.11.tar.gz && cd zlib-1.2.11
./configure --prefix=$PWD/install
make
sudo make install
make clean
安装libpng库
tar -xzvf libpng-1.6.37.tar.gz && cd libpng-1.6.37
./configure --prefix=$PWD/install --with-zlib-prefix=$PWD/../zlib-1.2.11/install
make
sudo make install
make clean
在./configure之后会根据当前环境与配置参数自动生成对应的Makefile.in和Makefile。
交叉编译
linux主机:ubuntu-18.04
交叉编译器:arm-buildroot-linux-gnueabihf
开发板kernel:Linux 5.4.0-150-generic x86_64
开发板:100ASK_STM32MP157_PRO开发板
libpng 依赖于 zlib 库, 所以要想移植 libpng 先得移植 zlib 库才可以。
交叉编译zlib库
zlib编译的过程比较简单,./configure不允许传入非指定参数;所以这里通过 $ export CC=xxx 进行配置交叉编译工具
book@100ask:~/Desktop/libpng/zlib-1.2.11$ ./configure -help
usage:
configure [--const] [--zprefix] [--prefix=PREFIX] [--eprefix=EXPREFIX]
[--static] [--64] [--libdir=LIBDIR] [--sharedlibdir=LIBDIR]
[--includedir=INCLUDEDIR] [--archs="-arch i386 -arch x86_64"]
依次执行下面的指令:
tar -zxvf zlib-1.2.11.tar.gz && cd zlib-1.2.11
export CC=/home/book/100ask_stm32mp157_pro-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin/arm-buildroot-linux-gnueabihf-gcc
./configure --prefix=$PWD/install
make
sudo make install
make clean
进入到 zlib 安装目录下,将 lib 目录下的所有动态链接库文件拷贝到开发板 Linux 系统/usr/lib 目录
若原开发板中有该库文件,需要先将出厂系统中原有的 zlib 库文件删除, 在开发板 Linux 系统下执行命令:rm -rf /usr/lib/libz.* /lib/libz.*
交叉编译libpng库
依次输入指令:
tar -xzvf libpng-1.6.37.tar.gz && cd libpng-1.6.37
./configure --prefix=$PWD/install --host=arm-buildroot-linux-gnueabihf CC=/home/book/100ask_stm32mp157_pro-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin/arm-buildroot-linux-gnueabihf-gcc CPPFLAGS="${CPPFLAGS} -I/home/book/Desktop/libpng/zlib-1.2.11/install/include" LDFLAGS="${LDFLAGS} -L/home/book/Desktop/libpng/zlib-1.2.11/install/lib"
make
sudo make install
make clean
- –prefix:指定安装目录
- –host:指定目标主机类型
- CC:指定交叉编译工具
- –enable-shared:编译生成.so动态库
- –enable-static:编译生成.a静态库
- LDFLAGS:指定链接库目录。不一定需要,看编译具体情况
- CPPFLAGS:指定头文件目录。不一定需要,看编译具体情况
移植到开发板:进入到 libpng 安装目录,将 bin 目录下的所有测试工具拷贝到开发板 Linux 系统/usr/bin 目录;将 lib 目录下的所有库文件拷贝到 Linux 系统/usr/lib 目录。