Mysql 升级到 5.5 GA 时,PHP 5.2.6 编译出错!已解决!

范堡 发布于 2010/12/16 10:12
阅读 989
收藏 2

今天把原来的 Mysql 5.1.35 升级至 Mysql 5.5 GA

由于 Mysql-Dev 也一同更新了。

所以必须重新编译 PHP 5.2.6 环境。

但编译出错,出现以下各种错误。

而最终的解决方式,是升级 PHP 至最新的 5.2.16

所以建议大家在 相似的环境中,需升级 Mysql 至 5.5 GA,必须同时更新 PHP

部分信息如下:

/usr/ports/databases/php5-mysqli/work/php-5.2.12/ext/mysqli/mysqli.c:637: error: (Each undeclared identifier is reported only once
/usr/ports/databases/php5-mysqli/work/php-5.2.12/ext/mysqli/mysqli.c:637: error: for each function it appears in.)
/usr/ports/databases/php5-mysqli/work/php-5.2.12/ext/mysqli/mysqli.c:638: error: 'MYSQL_RPL_SLAVE' undeclared (first use in this function)
/usr/ports/databases/php5-mysqli/work/php-5.2.12/ext/mysqli/mysqli.c:639: error: 'MYSQL_RPL_ADMIN' undeclared (first use in this function)

 

解决方式:

原因:这是mysql的一个bug,http://bugs.php.net/bug.php?id=46207&edit=1 ,已经提交了。
解决:
修改 /usr/include/mysql/mysql.h (使用rpm安装方式的路径) 文件内容  :


enum mysql_protocol_type
{
MYSQL_PROTOCOL_DEFAULT, MYSQL_PROTOCOL_TCP, MYSQL_PROTOCOL_SOCKET,
MYSQL_PROTOCOL_PIPE, MYSQL_PROTOCOL_MEMORY
};
----------------------------==添加的内容开始==-------------------------------------
/*
There are three types of queries - the ones that have to go to
the master, the ones that go to a slave, and the adminstrative
type which must happen on the pivot connectioin
*/
enum mysql_rpl_type
{
MYSQL_RPL_MASTER, MYSQL_RPL_SLAVE, MYSQL_RPL_ADMIN
};
----------------------------==添加的内容结束==--------------------------------------
typedef struct character_set
{
unsigned int number; /* character set number */
unsigned int state; /* character set state */
const char *csname; /* collation name */
const char *name; /* character set name */


将以上蓝色的部分内容,添加到mysql.h文件对应的位置,重新编译即可。

但接下来,还可能会出现以下错误:

ext/iconv/.libs/iconv.o: In function `php_iconv_stream_filter_ctor':
/home/king/php-5.2.13/ext/iconv/iconv.c:2491: undefined reference to `libiconv_open'
collect2: ld returned 1 exit status
make: *** [sapi/cli/php] Error 1

原因:
在安裝 PHP 到系统中时要是发生「undefined reference to libiconv_open'」之类的错误信息,那表示在「./configure 」沒抓好一些环境变数值。错误发生点在建立「-o sapi/cli/php」是出错,没給到要 link 的 iconv 函式库参数。

解决方法:

编辑Makefile 大约77 行左右的地方: EXTRA_LIBS = ..... -lcrypt 在最后加上 -liconv,例如: EXTRA_LIBS = ..... -lcrypt -liconv 然后重新再次 make 即可。

或者用另一种办法

ln -s /usr/local/lib/libiconv.so.2 /usr/lib64/
make ZEND_EXTRA_LIBS='-liconv'

不过接下来!还可能会报错!

collect2: ld returned 1 exit status
make: *** [libphp5.la] Error 1

解决方法:

找到你的安装光盘,提取2个rpm文件并安装

rpm -ivh libtool-ltdl-1.5.22-6.1.x86_64.rpm
rpm -ivh libtool-ltdl-devel-1.5.22-6.1.x86_64.rpm

但即使这些文件都安装后,以上报错依旧!!

暂时在 php 5.2.6 上无法解决。

建议使用相似版本的朋友暂时不要升级 Mysql 5.5 GA

加载中
返回顶部
顶部