转 解决在X64 RedHat5.1 下以编译方式安装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/
http://www.oschina.net/question/17_87
转 解决在X64 RedHat5.1 下以编译方式安装PHP 出现的种种问题的更多相关文章
- [转]在ubuntu linux下以编译方式安装LAMP(apache mysql php)环境
FROM : http://www.cnblogs.com/eleganthqy/archive/2010/02/28/1675217.html 最近转向到了使用ubuntu做桌面,安装好系统以来一直 ...
- CentOS7下通过rpm方式安装MySQL及插入中文问题解决 [原创]
一 CentOS下通过rpm方式安装MySQL CentOS版本:CentOS-7 MySQL版本:MySQL-5.6.22 在网上搜了一下,Linux下安装MYSQL有三种方式: 1) 通过yum命 ...
- Python3.7源码在windows(VS2015)下的编译和安装
Python3.7源码在windows(VS2015)下的编译和安装 下载官方源码,使用vs2015(WIN10SDK),最python3.7.0的源码进行编译,编译出不同的版本(release,de ...
- ACE-6.1.0 linux 下的编译与安装步骤
ACE-6.1.0 linux 下的编译与安装步骤 引用至http://www.cnblogs.com/liangxiaxu/archive/2013/03/07/2948417.html 1.从 ...
- ubuntu 14.04 下利用apt-get方式安装opencv
转载,请注明出处:http://blog.csdn.net/tina_ttl 目录(?)[+] 标签(空格分隔): Linux学习 OpenCV ubuntu 1404 下利用apt-get方式安装O ...
- centos7下源码方式安装gitlab8.9+发送邮件+ldap
CentOS7下源码方式安装gitlab 环境描述 操作系统: centos7 redis: >=2.8 mysql >=5.5.14 git >=2.7.4 架构设计 一台gitl ...
- Centos6 系统下源码方式安装Mysql 记录
在运维工作中经常部署各种运维环境,涉及mysql数据库的安装也是时常需要的.mysql数据库安装可以选择yum在线安装,但是这种安装的mysql一般是系统自带的,版本方面可能跟需求不太匹配. #### ...
- redhat6.3下源码编译方式安装最新版git
在linux下安装git,通过yum方式安装的不是最新版本. 要替换最新版需要以下操作. 1.安装依赖包 # yum install curl-devel expat-devel gettext-de ...
- Linux下基于源代码方式安装MySQL 5.6
MySQL为开源数据库,因此能够基于源代码实现安装.基于源代码安装有很多其它的灵活性. 也就是说我们能够针对自己的硬件平台选用合适的编译器来优化编译后的二进制代码.依据不同的软件平台环境调整相关的编译 ...
随机推荐
- Eclipse国内镜像源配置方法
Table of Contents 我们在国内从官网下载Eclipse以及插件非常慢,那么,有没有方法变快呢? 有,那就是使用国内的公开镜像源替换官方源. 1 下载Eclipse 首先,我们看一个链接 ...
- [转]hive metadata 存mysql 注释中文乱码的有关
FROM : http://blog.csdn.net/tswisdom/article/details/41444287 hive metadata 存mysql 注释中文乱码的问题 hive me ...
- Verilog 加法器和减法器(1)
两个一位的二进制数x,y相加,假设和为s,进位为cout,其真值表为: 从真值表中,我们可以得到:s = x^y, cout = x&y,实现两个一位数相加的逻辑电路称为半加器. 实现该电路的 ...
- QT中使用MinGW 编译的protobuf库--包含库的生成和使用
QT中使用MinGW 编译的protobuf库--包含库的生成和使用 0前言 1准备工作 2生成protobuf库文件 3在QT中测试protobuf的使用 4结语 0前言 最近要在QT中使用prot ...
- go语言之进阶篇通过range遍历channel内容
1.通过range遍历channel内容 package main import ( "fmt" ) func main() { ch := make(chan int) //创建 ...
- knockout示例
最近项目需要用到knockout js,有关knockout的介绍网上已经很多很多了,但是很少有比较全面的示例,于是乎我就自己做了一个小demo,已备以后查阅.knockout经常和knockout. ...
- [leetcode]Add Binary @ Python
原题地址:https://oj.leetcode.com/problems/add-binary/ 题意: Given two binary strings, return their sum (al ...
- 通读cheerio API
所谓工欲善其事,必先利其器,所以通读了cheerio的API,顺便翻译了一遍,有些地方因为知道的比较少,不知道什么意思,保留了英文,希望各位不吝告诉我,然后一起把这个翻译完成. ###cheerio ...
- FastDFS tracker storage 的工作原理及流程
FastDFS tracker storage 的工作原理及流程 2013 年 3 月 11 日 – 09:22 | 1,409 views | 收藏 (No Ratings Yet) FastDF ...
- WIN10系统右击开始菜单没有属性选项怎么办
修复方法一:1.按下"WIN+R"输入:regedit回车,进入注册表编辑器:2.在注册表左侧依次打开:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ ...