从源代码编译PHP 5.2.6时发生错误(Fedora 12)

我已经安装了Apache 2.2.14,PHP 5.3.1(使用mod_fastcgi)和MySQL 5.1.41 – 这很好,但我现在试图安装PHP 5.2.6(也使用mod_fastcgi),所以我可以使用它在其他虚拟主机上testing,因为我的主机使用这个版本。

我在CentOS 5和早期版本的Fedora中遵循了相同的过程,并且工作正常。 我已经安装了我需要的所有依赖项。 “configuration”工作正常,这里是我的configuration命令…

./configure \ --prefix=/usr/local/php-5.2.6 \ --enable-bcmath \ --with-bz2 \ --enable-calendar \ --with-curl \ --with-curlwrappers \ --enable-exif \ --enable-ftp \ --with-gd \ --enable-gd-native-ttf \ --enable-gd-jis-conv \ --with-gettext \ --with-gmp \ --with-imagick \ --with-imap \ --with-imap-ssl \ --with-kerberos \ --with-ldap \ --enable-libxml \ --enable-mbstring \ --with-mcrypt \ --with-mhash \ --with-mysql \ --with-mysqli \ --with-openssl \ --enable-pdo \ --with-pdo-mysql \ --enable-soap \ --enable-sockets \ --with-tidy \ --with-xmlrpc \ --with-xsl \ --enable-zip \ --with-zlib 

但是我似乎在运行“make”的时候出现错误…出现了很多错误,所以我已经显示了第一个和最后一个位(必须将其logging到文本文件中)。 我假设我需要一些编译标志/选项来得到这个工作。

 /bin/sh /home/luke/Downloads/php-5.2.6/libtool --silent --preserve-dup-deps --mode=compile gcc -Iext/libxml/ -I/home/luke/Downloads/php-5.2.6/ext/libxml/ -DPHP_ATOM_INC -I/home/luke/Downloads/php-5.2.6/include -I/home/luke/Downloads/php-5.2.6/main -I/home/luke/Downloads/php-5.2.6 -I/usr/include/libxml2 -I/home/luke/Downloads/php-5.2.6/ext/date/lib -I/usr/include/ImageMagick -I/usr/include/imap -I/home/luke/Downloads/php-5.2.6/ext/mbstring/oniguruma -I/home/luke/Downloads/php-5.2.6/ext/mbstring/libmbfl -I/home/luke/Downloads/php-5.2.6/ext/mbstring/libmbfl/mbfl -I/usr/include/mysql -I/home/luke/Downloads/php-5.2.6/TSRM -I/home/luke/Downloads/php-5.2.6/Zend -I/usr/include -g -O2 -c /home/luke/Downloads/php-5.2.6/ext/libxml/libxml.c -o ext/libxml/libxml.lo In file included from /home/luke/Downloads/php-5.2.6/Zend/zend.h:236, from /home/luke/Downloads/php-5.2.6/main/php.h:34, from /home/luke/Downloads/php-5.2.6/ext/libxml/libxml.c:28: /home/luke/Downloads/php-5.2.6/Zend/zend_alloc.h:34: error: expected specifier-qualifier-list before 'uint' /home/luke/Downloads/php-5.2.6/Zend/zend_alloc.h:41: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'char' /home/luke/Downloads/php-5.2.6/Zend/zend_alloc.h:43: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'void' /home/luke/Downloads/php-5.2.6/Zend/zend_alloc.h:44: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'void'[/code] 

 /home/luke/Downloads/php-5.2.6/Zend/zend_hash.h:339: note: previous implicit declaration of 'strtol' was here In file included from /home/luke/Downloads/php-5.2.6/main/php.h:234, from /home/luke/Downloads/php-5.2.6/ext/libxml/libxml.c:28: /home/luke/Downloads/php-5.2.6/main/snprintf.h:82: error: expected declaration specifiers or '...' before 'va_list' /home/luke/Downloads/php-5.2.6/main/snprintf.h:84: error: expected declaration specifiers or '...' before 'va_list' In file included from /home/luke/Downloads/php-5.2.6/main/php.h:236, from /home/luke/Downloads/php-5.2.6/ext/libxml/libxml.c:28: /home/luke/Downloads/php-5.2.6/main/spprintf.h:42: error: expected declaration specifiers or '...' before 'va_list' In file included from /home/luke/Downloads/php-5.2.6/ext/libxml/libxml.c:28: /home/luke/Downloads/php-5.2.6/main/php.h:293: error: expected declaration specifiers or '...' before 'va_list' In file included from /home/luke/Downloads/php-5.2.6/main/php.h:383, from /home/luke/Downloads/php-5.2.6/ext/libxml/libxml.c:28: /home/luke/Downloads/php-5.2.6/main/php_output.h:100: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'extern' In file included from /home/luke/Downloads/php-5.2.6/main/fopen_wrappers.h:25, from /home/luke/Downloads/php-5.2.6/main/php.h:401, from /home/luke/Downloads/php-5.2.6/ext/libxml/libxml.c:28: /home/luke/Downloads/php-5.2.6/main/php_globals.h:33: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'struct' In file included from /home/luke/Downloads/php-5.2.6/main/php.h:405, from /home/luke/Downloads/php-5.2.6/ext/libxml/libxml.c:28: /home/luke/Downloads/php-5.2.6/TSRM/tsrm_virtual_cwd.h:162: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token In file included from /home/luke/Downloads/php-5.2.6/main/php.h:407, from /home/luke/Downloads/php-5.2.6/ext/libxml/libxml.c:28: /home/luke/Downloads/php-5.2.6/Zend/zend_constants.h:58: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'int' /home/luke/Downloads/php-5.2.6/Zend/zend_constants.h:59: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'int' /home/luke/Downloads/php-5.2.6/Zend/zend_constants.h:60: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'void' /home/luke/Downloads/php-5.2.6/Zend/zend_constants.h:61: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'void' /home/luke/Downloads/php-5.2.6/Zend/zend_constants.h:62: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'void' /home/luke/Downloads/php-5.2.6/Zend/zend_constants.h:63: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'void' /home/luke/Downloads/php-5.2.6/Zend/zend_constants.h:64: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'int' In file included from /home/luke/Downloads/php-5.2.6/main/php.h:414, from /home/luke/Downloads/php-5.2.6/ext/libxml/libxml.c:28: /home/luke/Downloads/php-5.2.6/main/php_reentrancy.h:57: error: expected ')' before '*' token make: *** [ext/libxml/libxml.lo] Error 1 

我已经尝试了几次,删除文件夹和文件,并从头开始新鲜下载,仍然是相同的****。 我相信我以前看过这个错误,但我不记得我做了什么,因为我总是忘记写下来 – 我通常发现几个小时的挫折是由一些愚蠢的东西解决的。 我得到PHP 5.2.12编译好,但理想情况下,我想使用PHP 5.2.6来模拟Web主机的环境。

我不确定这是否会帮助你。

 [root@localhost php-5.2.6]# gcc -v Using built-in specs. Target: i686-redhat-linux Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootstrap --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-languages=c,c++,objc,obj-c++,java,fortran,ada --enable-java-awt=gtk --disable-dssi --enable-plugin --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-1.5.0.0/jre --enable-libgcj-multifile --enable-java-maintainer-mode --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --disable-libjava-multilib --with-ppl --with-cloog --with-tune=generic --with-arch=i686 --build=i686-redhat-linux Thread model: posix gcc version 4.4.2 20091222 (Red Hat 4.4.2-20) (GCC) 

我是否需要提供更多有用的信息?

简单的答案是,旧的PHP版本可能会做一些愚蠢的GCC 4.4无法处理。

尝试安装gcc 4.3,然后使用:

 CC=gcc-4.3 make 

小心点,不要犯同样的错误!

在PHP 5.2中,我似乎还必须使用这些configuration选项[–enable-fastcgi]和[–enable-force-cgi-redirect]才能使用mod_fastcgi。 如果您不使用PHP 5.2的这些选项,那么您只会在error.log文件中得到服务器500错误和无用的错误消息!

出于某种原因,PHP 5.3没有这些选项,并且我在5.2中使用5.3的./configure选项。

感谢您的帮助LapTop006,当我find时间,我需要在教程中写下所有这些。

确保你运行

 phpize 

之前任何./configure脚本(这包括PHP的其他扩展)。