保姆级Linux系统安装并使用libpng攻略

一、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"

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值