一、libpng库
libpng是一款C语言编写的比较底层的读写PNG文件的跨平台的库。由于依赖于zlib库,所以在安装libpng时往往还需要安装zlib库。
二、库版本的选择与下载
我下载的地址是
https://jaist.dl.sourceforge.net/project/libpng/
下载的版本为:libpng-1.6.37
zlib-1.2.11
这两个版本我实测是可以使用的。
为什么要注意版本呢?因为某些较早版本的zlib库和现在的zlib库有的接口不一样,而对应的libpng库也有所不同。如果安装的版本不一致在编译库时就会报错。
三、安装
1.可以将下面的代码保存为一个shell脚本,放到压缩包同目录直接执行。
#zlib:
#解压:
tar -xf zlib-1.2.11.tar.gz && cd zlib-1.2.11
#安装
./configure
make
sudo make install
cd ..
#libpng:
#解压
tar -xzvf libpng-1.6.37.tar.gz && cd libpng-1.6.37
#安装
./configure
make
sudo make install
sudo ldconfig
2.由于某些系统可能自带或者在安装其他应用时就装上了zlib,为了避免安装的libpng与系统本身自带的zlib有冲突,所以创建一个文件夹用于安装libpng与zlib。
#!/bin/bash
#=====================================#
#zlib:
#解压:
tar -xf zlib-1.2.11.tar.gz && cd zlib-1.2.11
#安装
./configure \
--prefix=/home/uos/libpng/install
make
sudo make install
make clean
cd ..
#libpng:
#解压
tar -xzvf libpng-1.6.37.tar.gz && cd libpng-1.6.37
#安装
./configure \
--prefix=/home/uos/libpng/install \
--with-zlib-prefix=/home/uos/libpng/install
make
sudo make install
make clean
注意:使用了./configure之后,make install需要加sudo
libpng有Makefile.am,在./configure之后会自动生成对应的Makefile.in和Makefile。
此种方法可以用于解决
/lib/libpng16.so.16: undefined reference to
`inflateValidate@ZLIB_1.2.9’ collect2: error: ld returned 1 exit
status
这类由于版本不对应的兼容性错误。有的系统可能由于环境配置问题,执行了./configure后在make时还是会优先找到系统内安装的zlib,这时如果还有这种错误,可以更换libpng版本来编译。
./configure介绍:
Configure脚本配置工具是autoconf的工具的基本应用。
四、测试
如果使用第一种方式安装的libpng的话。
使用gcc test.c -o test -lpng
直接链接进行编译,编译器会在系统目录中寻找相关链接的库文件
若使用的是第二种方式,需要指明链接目录:
g++ test1.cpp \
/home/stephane/programs/install/lib/libpng.a \
/home/stephane/programs/install/lib/libz.a \
-I/home/stephane/programs/install/include -o test
如上所示为静态链接,需注意直接指明库文件时不要加-L,同时使用-I指明头文件包含目录
分别在Ubuntu20、UOS、kylin系统进行了测试。
更新
使用cmake的小伙伴在链接libpng库时,需要保证使用的库在编译时加了-fPIC参数。即在./configure时后缀增加一个"-fPIC"