服务器维护,服务器代维,安全设置,漏洞扫描,入侵检测服务

运维之家

 找回密码
 注册
搜索
查看: 15009|回复: 9

php编译安装问题

[复制链接]
dirtysea 发表于 2010-4-1 16:46:16 | 显示全部楼层 |阅读模式
php编译安装问题


编译嗣后的./configure参数路径可以根据phpinfo()里显示的为参照。

1。出现找不到apxs的问题:
应该是apxs没装,上网查apxs是apache的一个扩展工具。httpd不是默认或者是用yum安装的还需要安装httpd-devel

#yum install httpd-devel
把apxs装上

重新编译php
./configure --prefix=/usr/local/php5 --with-config-file-path=/etc --with-apxs2=/usr/sbin/apxs --with-mysql=/usr/lib/mysql
#make


2。出现“xml2-config not found.please check your libxml2”错误,原因是没有libxml2 ,使用 yum install libxml2 即可
#yum -y install libxml2-devel
重新编译

3。出现“configure: error: Cannot find libmysqlclient_r under /usr/lib/mysql.
Note that the MySQL client library is not bundled anymore!“可能是mysql的库不完全,**mysql-devel和mysql-server是否安装了,果然没有安装立刻安装
#yum install mysql-devel  or  #yum install mysql-server

#make
#make install

4。安装完成后如果提示:You may want to add: /usr/local/php5/lib/php to your php.ini include_path
找php.ini文件看看,文件里面有没有类似“include_path“的段然后把"/usr/local/php5/lib/php"加进去
#vi /etc/php.ini
include_path = "/usr/local/php5/lib/php"



5。最后一步重新启动httpd报如下错误:
"httpd: Syntax error on line 206 of /etc/httpd/conf/httpd.conf: Cannot load /usr/lib/httpd/modules/libphp5.so into server: /usr/lib/httpd/modules/libphp5.so: cannot restore segment prot after reloc: Permission denied"

原因:是Linux有一个SELinux保护模式引起的。解决办法:

1关闭SELINUX的方法:
vi /etc/selinux/config 将SELINUX=enforcing 改成SELINUX=disabled 需要重启
这个方法可能会对服务器带来风险。
2不关闭SELINUX的方法:# setenforce 0
# chcon -c -v -R -u system_u -r object_r -t textrel_shlib_t /usr/lib/httpd/modules/libphp5.so
# service httpd restart
# setenforce 1

6。启动httpd出新"module php5_module is already loaded, skipping"    重新编译php安装后,在httpd.conf文件里又加了
LoadModule php5_module        /usr/lib/httpd/modules/libphp5.so 这一行。将这行注释掉重启动OK!
完成!
 楼主| dirtysea 发表于 2010-7-4 13:15:08 | 显示全部楼层
编译安装PHP的时候出现错误:
configure: error: Cannot find ldap.h

原因:
依赖于openldap包,没安装此类相关软件包造成。

问题解决方法:

yum install openldap.i386 openldap-clients.i386 openldap-devel.i386 openldap-servers.i386

然后继续:./configure --prefix=/usr/local/.........................
错误不在出现
OK,编译通过。
 楼主| dirtysea 发表于 2010-9-1 14:12:43 | 显示全部楼层
ld: cannot find -lltdl解决方法


php在make过程中出现“ld: cannot find -lltdl”错误,详细错误如下:

/usr/bin/ld: cannot find -lltdl
collect2: ld returned 1 exit status
make: *** [libphp5.la] Error 1

原因是在编辑php时添加的“–with-mcrypt”选项造成。所以“usr bin ld cannot find lltdl”错误解决办法如下:

1、如果不需要mcrypt,那么编辑php时去掉该选项,然后再make、make install。

2、如果需要mcrypt,那么需要安装libltdl

libltdl在libmcrypt软件包中就有,具体过程:

#cd /software/libmcrypt-2.5.8/libltdl

#./configure  –enable-ltdl-install

#make

#make install

这个时候再回到php的安装目录下进行php的安装,应该就没有什么问题了:)

 楼主| dirtysea 发表于 2010-9-1 14:23:09 | 显示全部楼层

/usr/local/openssl/lib/libssl.a: could not read symbols: Bad value问题

编译错误如下:

  1. ....../usr/bin/ld: /usr/local/openssl/lib/libssl.a(s2_srvr.o): relocation R_X86_64_32 against `a local symbol' can not be used when making a shared object; recompile with -fPIC<BR>/usr/local/openssl/lib/libssl.a: could not read symbols: Bad value<BR>collect2: ld returned 1 exit status<BR>make: *** [libphp5.la] 错误 1
复制代码

 

解决办法:

 

openssl编译参数

  1. ./config -fPIC --prefix=/usr/local/openssl/ enable-shared
复制代码

 

PHP编译参数

  1. CFLAGS="-m64 -O3" CXXFLAGS="-m64 -O3" ./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache/bin/apxs --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --enable-mbstring=all --with-mcrypt --disable-cgi --enable-libgcc --enable-zend-multibyte --with-openssl
复制代码

 

 

 楼主| dirtysea 发表于 2010-9-9 13:45:11 | 显示全部楼层
解决/usr/bin/ld: cannot find -lmysqlclient错误


类似/usr/bin/ld: cannot find -xxxx的错误有很多, 首先我们可以最简单的判断一下:

这类情况一般是由于缺乏某某库文件, 又或者可能是由于已存在的库问题版本不对造成的

一般都是解决的办法就是安装缺乏的devel包就可以解决, 当然还有其他的未知因素, 我们看一个实例:

我在一台装centos5.2 x86_64的系统上配置php环境, 提示这个错误

"/usr/bin/ld: cannot find -lmysqlclient"

于是我安装了

# yum -y install mysql-devel

结果提示依旧, 我根据提示查看config.log

/usr/bin/ld: skipping incompatible /usr/local/mysql/lib/libmysqlclient.so when searching for -lmysqlclient
/usr/bin/ld: skipping incompatible /usr/local/mysql/lib/libmysqlclient.a when searching for -lmysqlclient
/usr/bin/ld: cannot find -lmysqlclient

她还是去找/usr/local/mysql/lib/libmysqlclient.so, 我来把这个错的换成对了, 刚才装了mysql-devel, 那么在/usr/lib64下就多了一个mysql的目录

# cd /usr/local/mysql
# mv lib lib.bak
# ln -s /usr/lib64/mysql /usr/local/mysql/lib (给他做个软链接)

然后再次编译安装php, 一切正常!
 楼主| dirtysea 发表于 2010-9-13 15:20:23 | 显示全部楼层
undefined reference to `libiconv_open 无法编译PHP


make时提示:
.....................................................
ext/iconv/.libs/iconv.o(.text+0x1738): In function `zif_iconv_mime_encode':
/home/jjdai/work/zhupiter/php-5.2.0/ext/iconv/iconv.c:1017: undefined reference to `libiconv_open'
ext/iconv/.libs/iconv.o(.text+0x1756):/home/jjdai/work/zhupiter/php-5.2.0/ext/iconv/iconv.c:1031: undefined reference to `libiconv_open'
ext/iconv/.libs/iconv.o(.text+0x1993):/home/jjdai/work/zhupiter/php-5.2.0/ext/iconv/iconv.c:1290: undefined reference to `libiconv_close'
ext/iconv/.libs/iconv.o(.text+0x19ad):/home/jjdai/work/zhupiter/php-5.2.0/ext/iconv/iconv.c:1293: undefined reference to `libiconv_close'
ext/iconv/.libs/iconv.o(.text+0x1b01):/home/jjdai/work/zhupiter/php-5.2.0/ext/iconv/iconv.c:1102: undefined reference to `libiconv'
ext/iconv/.libs/iconv.o(.text+0x1b33):/home/jjdai/work/zhupiter/php-5.2.0/ext/iconv/iconv.c:1134: undefined reference to `libiconv'
ext/iconv/.libs/iconv.o(.text+0x1b5e):/home/jjdai/work/zhupiter/php-5.2.0/ext/iconv/iconv.c:1150: undefined reference to `libiconv'
ext/iconv/.libs/iconv.o(.text+0x1e10):/home/jjdai/work/zhupiter/php-5.2.0/ext/iconv/iconv.c:1202: undefined reference to `libiconv'
ext/iconv/.libs/iconv.o(.text+0x1e3c):/home/jjdai/work/zhupiter/php-5.2.0/ext/iconv/iconv.c:1233: undefined reference to `libiconv'
ext/iconv/.libs/iconv.o(.text+0x207f):/home/jjdai/work/zhupiter/php-5.2.0/ext/iconv/iconv.c:1277: more undefined references to `libiconv' follow
ext/iconv/.libs/iconv.o(.text+0x2c08): In function `php_iconv_stream_filter_dtor':
/home/jjdai/work/zhupiter/php-5.2.0/ext/iconv/iconv.c:2393: undefined reference to `libiconv_close'
ext/iconv/.libs/iconv.o(.text+0x2cf2): In function `php_iconv_stream_filter_append_bucket':
/home/jjdai/work/zhupiter/php-5.2.0/ext/iconv/iconv.c:2543: undefined reference to `libiconv'
ext/iconv/.libs/iconv.o(.text+0x2d34):/home/jjdai/work/zhupiter/php-5.2.0/ext/iconv/iconv.c:2543: undefined reference to `libiconv'
ext/iconv/.libs/iconv.o(.text+0x2de7):/home/jjdai/work/zhupiter/php-5.2.0/ext/iconv/iconv.c:2465: undefined reference to `libiconv'
ext/iconv/.libs/iconv.o(.text+0x30e2): In function `php_iconv_stream_filter_factory_create':
/home/jjdai/work/zhupiter/php-5.2.0/ext/iconv/iconv.c:2419: undefined reference to `libiconv_open'
collect2: ld returned 1 exit status
make: *** [sapi/cli/php] Error 1



解决方法:
#wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.1.tar.gz
#tar -zxvf libiconv-1.13.1.tar.gz
#cd libiconv-1.13.1
# ./configure --prefix=/usr/local/libiconv
# make
# make install

再检查php
#./configure --with-mysql=/backup/mysql --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-curl --with-gd --enable-gd-native-ttf --with-apxs2=/usr/local/apache/bin/apxs --enable-sockets --with-iconv=/usr/local/libiconv
#make
#make install

另一种解决方法为去除iconv模块也能正常编译php,如下:
編輯 Makefile 大約 77 行左右的地方:
EXTRA_LIBS = ..... -lcrypt
在最後加上 -liconv,例如:
EXTRA_LIBS = ..... -lcrypt -liconv
再运行make就可以了。
最后一种方法:由tonyty163提供:

#make ZEND_EXTRA_LIBS='-liconv'
#make install

 楼主| dirtysea 发表于 2010-9-30 16:59:00 | 显示全部楼层
解决configure: error: Please reinstall the libcurl

今天配置一台server的php支持curl的时候, 出现如下报错

checking for cURL in default path... not found
configure: error: Please reinstall the libcurl distribution -
easy.h should be in /include/curl/

其实就是curl的dev包没有安装, 解决方案:
终端下

# yum -y install curl-devel

然后就可以继续了
 楼主| dirtysea 发表于 2011-9-19 14:22:23 | 显示全部楼层
解决 “XX.lo is not a valid libtool object”

1、先介绍一下libtool是个什么东东;

    libtool 是一个通用库支持脚本,将使用动态库的复杂性隐藏在统一、可移植的接口中;使用libtool的标准方法,可以在不同平台上创建并调用动态库。可以认为libtool是gcc的一个抽象,其包装了gcc(或者其他的编译器),用户无需知道细节,只要告诉libtool需要编译哪些库即可,libtool将处理库的依赖等细节。libtool只与后缀名为lo、la为的libtool文件打交道。(lo是目标文件,la是库文件)

libtool主要的一个作用是在编译大型软件的过程中解决了库的依赖问题;将繁重的库依赖关系的维护工作承担下来,从而释放了程序员的人力资源。libtool提供统一的接口,隐藏了不同平台间库的名称的差异等细节,0生成一个抽象的后缀名为la高层库libxx.la(其实是个文本文件),并将该库对其它库的依赖关系,都写在该la的文件中。该文件中的dependency_libs记录该库依赖的所有库(其中有些是以.la文件的形式加入的);libdir则指出了库的安装位置;library_names记录了共享库的名字;old_library记录了静态库的名字。

from:http://hi.baidu.com/lieyu063/blo ... e41f365882dd39.html

2、在linux中执行一下命令

tar xzvf db-4.5.20.tar.gz
    cd /db-4.5.20/dist

./configure --prefix=/usr/local/db-4.5.20

make & make install

在执行最后一个命令“make & make install”来安装db-4.5.20时出现“XX.lo is not a valid libtool object” 这个错误。

上面--prefix=/usr/local/db-4.5.20表示下面在执行make install的时候会将db-4.5.20安装到/usr/local/db-4.5.20这个目录下

3、解决办法

执行一下命令来解决

make realclean

./db-4.5.20/dist/configure

make install

哦耶!!最终安装成功!!

make realclean 的功能是清除所有的上次编译残留信息
   from:http://www.linuxsir.org/bbs/showthread.php?t=227716

 楼主| dirtysea 发表于 2012-9-4 23:52:27 | 显示全部楼层
解决 “configure: error: libjpeg.(a|so) not found"

在安装php的过程中.执行到./configure 这一步的时候.竟然提示"configure: error: libjpeg.(a|so) not found"这项错误.明明已经安装过了libjpeg 和libjpeg-devel了.可这里仍然提示找不到库文件.很明显是路径的问题.默认会在/usr/lib/目录里查找相应的文件.但用whereis libjpeg发现.libjpeg被安装在了/usr/lib64/目录里.

[root@bogon php-5.2.17]# whereis libjpeg libjpeg: /usr/lib/libjpeg.so /usr/lib64/libjpeg.so
1.如果提示"configure: error: libjpeg.(a|so) not found"错误

所以这里我们需要复制一份libjpeg.so到/usr/lib/目录里才可以.再次执行./configure命令即可.

cp -frp /usr/lib64/libjpeg.* /usr/lib/
2.注意过程中还会提示" Configure: error: libpng.(also) not found."错误,解决办法和上面的一样.

cp -frp /usr/lib64/libpng* /usr/lib/
3.如果提示"configure: error: Cannot find ldap libraries in /usr/lib."的话.

cp -frp /usr/lib64/libldap* /usr/lib/

说明:

通过上面的搜索其实就知道一些原因了,configure一般的搜索编译路径为/usr/lib/下,因为php默认就在/usr/lib/下找相关库文件,而x64机器上是在:/usr/lib64.这时你就可以直接把需要的库文件从/usr/lib64中拷贝到/usr/lib/中去就可以了.




 楼主| dirtysea 发表于 2012-9-5 00:17:13 | 显示全部楼层
configure: error: Cannot find libmysqlclient under /usr
Note that the MySQL client library is not bundled anymore
解决:
yum -y install mysql-devel
mkdir /usr/lib/mysql/
cp /usr/lib64/mysql/* /usr/lib/mysql/
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|小黑屋|手机版|Archiver|运维之家

GMT+8, 2024-3-28 19:31 , Processed in 0.099162 second(s), 14 queries .

Powered by Dirtysea

© 2008-2020 Dirtysea.com.

快速回复 返回顶部 返回列表