单位的测试服务器是很早以前装的 RedHat Linux 7.3。说是「测试服务器」,但由于种种原因,在上面已经跑了很多应用,再也离不开了,所以也没有办法把操作系统更新成比较新的版本。
大概是昨天或今天早上的某个时候,这台机器被人重启了(或者是自己重启了),然后就死在了启动过程中。下午有人找我报告,才发现这个情况。再次重启之后,机器是没有问题了,但是又再一次体验了那满屏幕的问号。——老毛病了,每次自动启动的时候
Apache + PHP 的应用访问 Oracle 得到的多字节字符编码总是不对,重启一次 Apache
就好了。一直不知道是什么原因。
心念一动,正好趁这个机会把这台服务器上的
Apache + PHP + MySQL,以及周边的那些,如 OpenSSL、libpng、libiconv
等等,给重新整理一遍,应用上最新(或者说可用的最新)版本。
OpenSSL、libiconv +
gettext、libjpeg、libpng……,都很顺利。原本以为这些版本很新的东西会在不完全符合
ANSI C++ 规范的 2.96 版 GCC
编译器上出问题,没想到居然一路绿灯。不过,好景不长,在 libxml2-2.6.24
上卡住了。
错误信息包含下面几句:
…… xmlIO.c: In function `xmlCheckFilename': xmlIO.c:619: syntax error before `struct' xmlIO.c:621: `stat_buffer' undeclared (first use in this function) ……
这种语法错误,不像是编译器版本的问题。我先试着跳过这一步,继续下面的安装。不过在编译 PHP 5.1.4 的时候,configure 报告说需要 libxml2 的 2.6.11 以上版本,而我这台机器上以前的 libxml2 的版本只是 2.6.7。显然,这个问题是无法回避了。
拿错误信息去查,只有 FreeBSD 的技术支持站点上有一条 bug
报告的记录。不过可喜的是,报告中也附上了修正方法。经测试,该方法对于我的
RedHat Linux 7.3 也同样有效。
以下转自该文:
Fix:
*** xmlIO.c.DIST Sat Apr 29 09:44:16 2006
--- xmlIO.c Sat Apr 29 09:44:35 2006
***************
*** 616,621 ****
--- 616,622 ----
}
#else
#ifdef HAVE_STAT
+ {
struct stat stat_buffer;
if (stat(path, &stat_buffer) == -1)
***************
*** 625,630 ****
--- 626,632 ----
if (S_ISDIR(stat_buffer.st_mode))
return 2;
#endif /* S_ISDIR */
+ }
#endif /* HAVE_STAT *
#endif /* WIN32 */
想要修复这个错误的朋友,若看不懂上面的意思,就注意那两行标了加号的地方。原来的
xmlIO.c,是没有这两行的,找到它们的位置后把它们补上,就可以通过编译了。行号人家也标出来了,在原
xmlIO.c 文件的 616~621 行附近。
若看到这里还不明白,那就只好委屈了……
没有评论:
发表评论