gd编译问题

因为要生成png格式的验证码,所以调用了imagepng函数,没想到以前运行正常的函数,居然导致php-cgi程序挂掉了,报出的错误是:
libpng warning: Application was compiled with png.h from libpng-1.5.2
libpng warning: Application  is  running with png.c from libpng-1.2.44

我在编译gd-2.0.33和php的时候,都是使用了相同参数:--with-png-dir=/home/XXX/lib,按理说应该只会把我自己编译的libpng1.5给链接进来。
用ldd命令查看php-cgi程序,发现同时链接了我自己安装的libpng1.5.2和系统默认安装的/usr/lib64/libpng12.so,看来错误的地方就是链接的时候错误的把libpng1.2链接进来了。于是到我自己安装的lib目录下,继续用ldd查看编译的gd.so程序,里面确实链接了系统默认的libpng,为什么编译的时候with-png=xxx没有生效呢?

于是自己手动在gd下执行了configure函数,发现configure检测过程中出现:
checking for libpng12-config... /usr/bin/libpng12-config
checking for libpng-config... /usr/bin/libpng-config

在我自己安装的libpng1.5.2下面只有libpng15-config和libpng-config,于是修改PATH环境变量,把libpng-config所在目录放在最前面,然后再次configure,发现找到的仍然是系统的libpng1.2,看来gd-2.0.33只能使用libpng1.2系列了,重新下载libpng1.2.46安装,然后把安装后的libpng12-config和libpng-config所在目录放在PATH开头,这次configure,终于找到了我自己编译的libpng。到此问题解决。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

libpng版本导致的php问题,libpng warning: Application was compiled with png.h  

2013-09-24 20:21:25|  分类: 默认分类 |  标签:libpng  warning  incompatible  png_create_read_stru   |举报 |字号 订阅

环境:
Centos6.3 X86_64
PHP 5.3.10  自编译
gd-2.0.35  自编译
libpng-1.5.6  自编译
libpng-1.2.9 yum
--------------------------------
公司用C++编译了一个php的动态库XXX.so,php可以正常加载,但在调用这个库中的一个函数的时候,提示:
     
     
php test . php 
libpng warning : Application was compiled with png . h from libpng - 1.5 . 6
libpng warning : Application   is  running with png . c from libpng - 1.2 . 49
libpng error : Incompatible libpng version in application and library
[ read_png_file ] png_create_read_struct failed
很纳闷,在编译gd、php的时候,已经指定了png的位置--with-png-dir=/usr/local/libpng,使用的是1.5.6,为什么执行的时候还会调用自带的 libpng-1.2.49 ,于是把系统的   libpng-1.2.49 删除掉(因为是测试环境,就随便删了,线上服务器自重),重新编译php,我了个去,编译不过去,提示:(这里是因为gd有调用,导致php编译gd库的时候找不到)
      
      
/usr/ bin / ld : cannot find - lpng12
collect2 : ld returned 1 exit status
make : *** [ sapi / fpm / php - fpm ] Error 1
我擦,默认会调用系统的库!!!编译调用png的地方就只有2个,一个是php的编译参数 --with-png-dir=/usr/local/libpng, 另一个是gd库,于是重新编译gd,在编译的时候发现这样的2行:
libpng版本导致的php问题,libpng warning: Application was compiled with png.h 全是坑 - 李坤山 - 李坤山VS断悬
原来在gd这里,就已经调用了系统的libpng-1.2.49。
这里顺便说下, libpng12 、 libpng15、 libpng16 数字就是代表版本号1.2.X ,1.5.X ,1.6.X  具体可以看
ls /usr/include/libpng*
知道问题所在,解决问题就比较有针对性了,2个方法:
1,把系统自带的给删除了,这个觉得比较不靠谱,怕有互相依赖,有后遗症就不好了。
 删除后编译的时候就变成:
       
       
checking for libpng12 - config ... no
checking for libpng - config ... / usr / local / bin / libpng - config
2,2个版本都可以保留;编译后,修改Makefile文件
修改262行左右 LIBPNG12_CONFIG的值,改成跟 LIBPNG_CONFIG  一样即可 ,如:

LIBPNG12_CONFIG = /usr/ bin / libpng12 - config
LIBPNG_CONFIG = /usr/ local / bin / libpng - config

修改成:

LIBPNG12_CONFIG /usr/local/bin/libpng-config
LIBPNG_CONFIG = /usr/ local / bin / libpng - config

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值