解决在X64 RedHat5.1、centos、linux 下以编译方式安装PHP 出现的种种问题(转)


 

不知道大家有没有遇到在  X64 RedHat5 或者 RedHat4 下.编译安装PHP环境的时候. 安装了libxml,zlib,jpeg,libpng,freetype,libart_lgpl,gettext…  到编译 GD 库的时候出错.
 
configure 的参数是
 
./configure –prefix=/usr/local/gd2 –with-zlib=/usr/local/zlib2/ –with-png=/usr/local/libpng2/ –with-jpeg=/usr/local/jpeg6/ –with-freetype=/usr/local/freetype2/ –with-libart=/usr/local/libart/ –with-gettext=/usr/local/gettext/ –with-libxml=/usr/local/libxml2
 —————————
 
错误如下:
 
/usr/bin/ld: /usr/local/jpeg6//lib/libjpeg.a(jcapimin.o): relocation R_X86_64_32 against `a local symbol’ can not be used when making a shared object; recompile with -fPIC
 /usr/local/jpeg6//lib/libjpeg.a: could not read symbols: Bad value
 collect2: ld returned 1 exit status
 make[2]: *** [libgd.la] 错误1
 make[2]: Leaving directory `/data/soft/php/gd-2.0.35′
 make[1]: *** [all-recursive] 错误1
 make[1]: Leaving directory `/data/soft/php/gd-2.0.35′
 make: *** [all] 错误2
 
到网上搜索,很多网友都说只需要修改 Makefile
 
vi Makefile
 找到 CFLAGS= -O2 -I$(srcdir)
 在后面加入-fPIC,即变成CFLAGS= -O2 -I$(srcdir) -fPIC
 
这样就可以继续编译了
 但我在 gd-2.0.35  gd-2.0.33 以及 gd-2.0.36RC1 的 Makefile 里头,
 都只找到 CFLAGS= -O2 并没有后边的 -I$(srcdir)
 故此就算把-fPIC加上了,也毫无作用。
 ————————————
 
开始着手研究,根据错误提示,应该是跟 jpeg6 有关,于是尝试使用另外方式对 jpeg6 进行编译。
 
原本网上最多的编译 jpeg6 的方法是 (注jpeg6下载地址http://www.ijg.org/)
 
—————————–
 # tar -zxf jpegsrc.v6b.tar.gz
 # cd jpeg-6b/
 # ./configure –prefix=/usr/local/jpeg6
 # make
 # make install-lib
 # make install
 在32位上以这种方式安装是没问题的.但64的话,或许要改一改,如下:
 —————————–
 # tar -zxf jpegsrc.v6b.tar.gz
 # cd jpeg-6b/
 # ./configure –prefix=/usr/local/jpeg6/ –enable-shared –enable-static
 # make
 # make install
 —————————-
 
但又会出个问题! 大多数环境在用这种方式编译jpeg6的时候都会出错(有够烦的,简直是一波三折),提示
 make: ./libtool: Command not found
 make: *** [jcapimin.lo] Error 127
 —————————
 
错误分析:由于libtool版本过低导致的,重新下载新版本的libtool以默认方式安装.下载地址:ftp://ftp.gnu.org/gnu/libtool/
 也不用下载太新,1.5.xx 既可。执行以下命令:
 # tar zxvf libtool-1.5.26.tar.gz
 # cd libtool-1.5.26
 # ./configure
 # make
 # make install
 (最好重新启动一下服务器,重新加载环境以确保正常)
 然后进入jpeg-6b的源码目录,然后执行以下步骤,切记!
 # cp /usr/local/share/libtool/config.sub ./
 # cp /usr/local/share/libtool/config.guess ./
 # ./configure –prefix=/usr/local/jpeg6/ –enable-shared –enable-static
 # make
 # make install
 
—————————
 
好了!这下尝试执行GD 的 configure , 虽然依然是 libgd.la 错误,但提示的已经不是 jpeg6 的问题了。
 这下是 freetype2 的问题了,如下:
 —————————
 
/usr/bin/ld: /usr/local/freetype2/lib/libfreetype.a(ftinit.o): relocation R_X86_64_32 against `tt_driver_class’ can not be used when making a shared object; recompile with -fPIC
 /usr/local/freetype2/lib/libfreetype.a: could not read symbols: Bad value
 collect2: ld returned 1 exit status
 make[2]: *** [libgd.la] 错误1
 make[2]: Leaving directory `/data/soft/php/gd-2.0.35′
 make[1]: *** [all-recursive] 错误1
 make[1]: Leaving directory `/data/soft/php/gd-2.0.35′
 make: *** [all] 错误2
 —————————
 
着看上去是freetype2 出错但其实是zlib安装问题
 原本的编译方法就直接是:
 —————————
 # tar zxvf zlib-1.2.3.tar.gz
 # cd zlib-1.2.3
 #./configure –prefix=/usr/local/zlib2/ && make && make install
 在32位上以这种方式安装是没问题的.但64的话,要改一改,如下
 —————————
 解决方法:重新编译安装zlib,步骤如下:(在重新编译之前记得要把之前安装在/usr/local/zlib2里头的文件都完全删除)
 # tar -zxvf zlib-1.2.3.tar.gz
 # cd zlib-1.2.3
 #./configure
 #vi Makefile
 找到 CFLAGS=-O3 -DUSE_MMAP
 在后面加入-fPIC,即变成CFLAGS=-O3 -DUSE_MMAP -fPIC
 # make
 # make install
 —————————–
 然后再重新编译 freetype (在重新编译之前记得要把之前安装在/usr/local/freetype里头的文件都完全删除)
 #./configure –prefix=/usr/local/freetype2/ && make && make install
 
Zlib 跟 freetype 的安装一定要按照顺序,不然解决不了问题.
 —————————–
 
行了!这下子 freetype 也没问题了!但GD的编译还是不过,错误如下:
 
/usr/bin/ld: /usr/local/libpng2/lib/libpng12.a(libpng12_la-png.o): relocation R_X86_64_32 against `a local symbol’ can not be used when making a shared object; recompile with -fPIC
 /usr/local/libpng2/lib/libpng12.a: could not read symbols: Bad value
 collect2: ld returned 1 exit status
 make[2]: *** [libgd.la] 错误1
 make[2]: Leaving directory `/data/soft/php/gd-2.0.35′
 make[1]: *** [all-recursive] 错误1
 make[1]: Leaving directory `/data/soft/php/gd-2.0.35′
 make: *** [all] 错误2
 —————————–
 libpng的问题,我们改一改编译以及安装的方式。跟上边2个一样,要先把/usr/local/libpng2 都删干净,然后再重新编译安装。
 编译安装 libpng
 #tar zxvf libpng-1.2.34.tar.gz
 #cd libpng-1.2.34
 #cp scripts/makefile.gcmmx makefile
 #./configure –prefix=/usr/local/libpng2/
 # vi Makefile
 找到 CFLAGS = -g -O2 后边加上 -fPIC
 # make && make install
 —————————–
 
好了,真像玩游戏过三关的样子…..
 把最后这 libpng 也解决了,这GD也总算是编译好了。
 接下来终于能编译  php-5.2.6
 
# tar zxvf php-5.2.6.tar.gz
 # cd php-5.2.6
 # ./configure –prefix=/usr/local/php –with-apxs2=/usr/local/apache2/bin/apxs –with-jpeg-dir=/usr/local/jpeg6/ –with-png-dir=/usr/local/libpng2/ –with-gd=/usr/local/gd2/ –with-freetype-dir=/usr/local/freetype2/  –with-zlib-dir=/usr/local/zlib2/ -with-mysql=/usr/local/mysql  –with-curl=/usr/local/curl –with-gettext=/usr/local/gettext
 
好了! 又卡住了!!!!!
 如果 mysql 是使用rpm方式安装,除了安装server跟client记得装上其开发包 MySQL-devel-community
 如果你的mysql是装在另外一台机器,这么你编辑安装php也只需装上 MySQL-client-community 跟 MySQL-devel-community
 不然php ./configure  的时候会出现找不到 mysql 的错误
 
#####################
 
如果你已经安装了上述说的rpm包,或者是以编译方式安装mysql的,还是出错,并提示 Cannot find libmysqlclient_r 。
 
如下:
 
checking for MySQL support… yes checking for specified location of the MySQL UNIX socket… no checking for MySQL UNIX socket location… no configure: error: Cannot find libmysqlclient_r under /usr/local/mysql. Note that the MySQL client library is not bundled anymore!
 
—————————–
 
或者是:
 
checking for MySQL support… yes checking for specified location of the MySQL UNIX socket… no checking for MySQL UNIX socket location… no configure: error: Cannot find libmysqlclient_r under /usr. Note that the MySQL client library is not bundled anymore!
 
—————————–
 
那么,你需要注意了,你可能在编译APACHE的时候,使用–with-mpm模块,请在编译MYSQL的时候加上 –enable-thread-safe-client.
 
这是PHP5.2的一个改进,在PHP5.2.0之前的版本都不需要MYSQL启用安全线程。 因此在安装MYSQL时,configure应该是: ./configure prefix=/usr/local/mysql –with-extra-charsets=all –enable-thread-safe-client
 
如果是rpm安装的话,经过一番研究,得出所需文件 libmysqlclient rpm包默认安装在了 /usr/lib64/mysql 下。
 
但PHP编译的时候找的是 /usr/lib/mysql 所以就找不到了。
 
这么好办,做个软连接即刻解决 ln -s /usr/lib64/mysql /usr/lib
 
这样就会有了 /usr/lib/mysql 这一路径,PHP编译顺利通过!
 
最后 ZendOptimizer 也需要装上 X64 版本.最新下载地址为:
 
http://downloads.phpchina.com/zend/optimizer/

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值