<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <HTML ><HEAD ><TITLE >编译问题</TITLE ><META NAME="GENERATOR" CONTENT="Modular DocBook HTML Stylesheet Version 1.79"><LINK REL="HOME" TITLE="PHP 手册" HREF="index.html"><LINK REL="UP" TITLE="FAQ:常见问题" HREF="faq.html"><LINK REL="PREVIOUS" TITLE="安装常见问题" HREF="faq.installation.html"><LINK REL="NEXT" TITLE="使用 PHP" HREF="faq.using.html"><META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=UTF-8"></HEAD ><BODY CLASS="chapter" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#840084" ALINK="#0000FF" ><DIV CLASS="NAVHEADER" ><TABLE SUMMARY="Header navigation table" WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TH COLSPAN="3" ALIGN="center" >PHP 手册</TH ></TR ><TR ><TD WIDTH="10%" ALIGN="left" VALIGN="bottom" ><A HREF="faq.installation.html" ACCESSKEY="P" >上一页</A ></TD ><TD WIDTH="80%" ALIGN="center" VALIGN="bottom" ></TD ><TD WIDTH="10%" ALIGN="right" VALIGN="bottom" ><A HREF="faq.using.html" ACCESSKEY="N" >下一页</A ></TD ></TR ></TABLE ><HR ALIGN="LEFT" WIDTH="100%"></DIV ><DIV CLASS="chapter" ><H1 ><A NAME="faq.build" >章 54. 编译问题</A ></H1 ><P > 本节汇集了大多数编译时出现的常见错误。 </P ><DIV CLASS="qandaset" ><DL ><DT >1. <A HREF="faq.build.html#faq.build.configure" > 我用匿名 CVS 得到了最新版的 PHP,但是里面没有 configure 脚本! </A ></DT ><DT >2. <A HREF="faq.build.html#faq.build.configuring" > 我在配置 PHP 和 Apache 一起工作时遇到了问题。说没找到 <TT CLASS="filename" >httpd.h</TT >,但这个文件明明就在那里! </A ></DT ><DT >3. <A HREF="faq.build.html#faq.build.lex" > 当运行 PHP 配置时(<TT CLASS="literal" >./configure</TT >),遇到类似如下的问题: </A ></DT ><DT >4. <A HREF="faq.build.html#faq.build.apache-sharedcore" > 当试图启动 Apache 时,得到类似如下错误信息: </A ></DT ><DT >5. <A HREF="faq.build.html#faq.build.not-found" > 当运行 configure 时,报告说找不到头文件或 GD 库或 gdbm,或其它的什么包! </A ></DT ><DT >6. <A HREF="faq.build.html#faq.build.yytname" > 当编译 <TT CLASS="filename" >language-parser.tab.c</TT > 文件时,报错说 <TT CLASS="literal" >yytname undeclared</TT >。 </A ></DT ><DT >7. <A HREF="faq.build.html#faq.build.link" > 当我运行 <B CLASS="command" >make</B > 时,看上去一切正常,可当连接最后的程序时报告说找不到某些文件而失败了。 </A ></DT ><DT >8. <A HREF="faq.build.html#faq.build.undefined" > 当连接 PHP 时,报告说有一些未定义的引用。 </A ></DT ><DT >9. <A HREF="faq.build.html#faq.build.Apache" > 我不知道怎样把 PHP 和 Apache 1.3 一起编译。 </A ></DT ><DT >10. <A HREF="faq.build.html#faq.build.not-running" > 我按照所有的步骤在 UNIX 下安装了PHP 的 Apache 模块版本,但我的 PHP 脚本被显示在浏览器中或者提示保存此文件。 </A ></DT ><DT >11. <A HREF="faq.build.html#faq.build.activate-module" > 说要用:<TT CLASS="literal" >--activate-module=src/modules/php4/libphp4.a</TT >,但是此文件根本不存在,于是我改成了 <TT CLASS="literal" >--activate-module=src/modules/php4/libmodphp4.a</TT >,结果不行。怎么回事? </A ></DT ><DT >12. <A HREF="faq.build.html#faq.build.ansi" > 当我用 <TT CLASS="literal" >--activate-module=src/modules/php4/libphp4.a</TT > 试着把 PHP 编译成 Apache 的静态模块时,报告说我的编译器不服从 ANSI 标准。 </A ></DT ><DT >13. <A HREF="faq.build.html#faq.build.apxs" > 当我用 <CODE CLASS="option" >--with-apxs</CODE > 编译 PHP 时得到奇怪的错误信息。 </A ></DT ><DT >14. <A HREF="faq.build.html#faq.build.microtime" > 在 <B CLASS="command" >make</B > 的过程中,在 microtime 中出错,还有很多 <TT CLASS="literal" >RUSAGE_</TT > 之类的东西。 </A ></DT ><DT >15. <A HREF="faq.build.html#faq.build.mysql.tempnam" > 当带 MySQL 编译 PHP 时,可以正确地运行配置,但是在 <TT CLASS="literal" >make</TT > 的过程中出现了类似以下的错误信息: <SPAN CLASS="emphasis" ><I CLASS="emphasis" >ext/mysql/libmysql/my_tempnam.o(.text+0x46): In function my_tempnam': /php4/ext/mysql/libmysql/my_tempnam.c:103: the use of tempnam' is dangerous, better use mkstemp'</I ></SPAN >,这是怎么回事 </A ></DT ><DT >16. <A HREF="faq.build.html#faq.build.upgrade" > 我想升级我的 PHP。上哪里找到我用来配置目前的 PHP 的 <B CLASS="command" >./configure</B > 的参数呢? </A ></DT ><DT >17. <A HREF="faq.build.html#faq.build.gdlibs" > 和 GD 库一起编译 PHP 时,要么给出一个奇怪的编译错误,要么在运行时出现 segfaults。 </A ></DT ><DT >18. <A HREF="faq.build.html#faq.installation.needgnu" > 当编译 PHP 时我看到一些随机的错误,好像死了。我用的是 Solaris,不知道有没有关系。 </A ></DT ></DL ><DIV CLASS="qandaentry" ><B ><DIV CLASS="question" ><P ><A NAME="faq.build.configure" ></A ><B >1. </B > 我用匿名 CVS 得到了最新版的 PHP,但是里面没有 configure 脚本! </P ></DIV ></B ><DIV CLASS="answer" ><P ><B > </B > 你必须安装有 GNU 的 autoconf 包,这样才可以从 <TT CLASS="filename" >configure.in</TT > 生成 configure 脚本。从 CVS 得到源程序后只要在最高层的目录中运行 <B CLASS="command" >./buildconf</B > 即可。(同样,除非你用了 <TT CLASS="literal" >--enable-maintainer-mode</TT > 选项来运行 configure,否则即使 <TT CLASS="filename" >configure.in</TT > 文件更新了,configure 脚本也不会自动重新生成。所以当你发现 <TT CLASS="filename" >configure.in</TT > 文件更新了时要确保手工重新生成 configure 脚本。有一个症状是在 configure 之后或者运行 <TT CLASS="filename" >config.status</TT > 时在 Makefile 中寻找类似 @VARIABLE@ 的东西。) </P ></DIV ></DIV ><DIV CLASS="qandaentry" ><B ><DIV CLASS="question" ><P ><A NAME="faq.build.configuring" ></A ><B >2. </B > 我在配置 PHP 和 Apache 一起工作时遇到了问题。说没找到 <TT CLASS="filename" >httpd.h</TT >,但这个文件明明就在那里! </P ></DIV ></B ><DIV CLASS="answer" ><P ><B > </B > 你需要告诉 configure/setup 脚本你的 Apache 源程序最上层的目录位置。这意味着你需要这样指定 <CODE CLASS="option" >--with-apache=/path/to/apache</CODE > 而<SPAN CLASS="emphasis" ><I CLASS="emphasis" >不是</I ></SPAN >这样 <CODE CLASS="option" >--with-apache=/path/to/apache/src</CODE >。 </P ></DIV ></DIV ><DIV CLASS="qandaentry" ><B ><DIV CLASS="question" ><P ><A NAME="faq.build.lex" ></A ><B >3. </B > 当运行 PHP 配置时(<TT CLASS="literal" >./configure</TT >),遇到类似如下的问题: </P ><P > <TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><PRE CLASS="screen" >checking lex output file root... ./configure: lex: command not found configure: error: cannot find output from lex; giving up</PRE ></TD ></TR ></TABLE > </P ></DIV ></B ><DIV CLASS="answer" ><P ><B > </B > 请认真阅读 PHP 的<A HREF="install.unix.html" >安装</A >说明,并注意要编译 PHP 需要同时安装 flex 和 bison。根据设置的不同,可以从源代码编译 bison 和 flex,要么通过已编译好的发行包,例如 RPM。 </P ></DIV ></DIV ><DIV CLASS="qandaentry" ><B ><DIV CLASS="question" ><P ><A NAME="faq.build.apache-sharedcore" ></A ><B >4. </B > 当试图启动 Apache 时,得到类似如下错误信息: </P ><P > <TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><PRE CLASS="screen" >fatal: relocation error: file /path/to/libphp4.so: symbol ap_block_alarms: referenced symbol not found</PRE ></TD ></TR ></TABLE > </P ></DIV ></B ><DIV CLASS="answer" ><P ><B > </B > 该错误通常在 Apache 的核心程序被编译为共享用途的 DSO 库时发生。请尝试重新配置 Apache,确保至少使用了如下参数: </P ><P > <TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><PRE CLASS="screen" >--enable-shared=max --enable-rule=SHARED_CORE</PRE ></TD ></TR ></TABLE > </P ><P > 更多信息,请阅读 Apache 顶层目录的 <TT CLASS="filename" >INSTALL</TT > 文件或者 Apache 的 <A HREF="http://httpd.apache.org/docs/1.3/dso.html" TARGET="_top" >DSO 手册</A >。 </P ></DIV ></DIV ><DIV CLASS="qandaentry" ><B ><DIV CLASS="question" ><P ><A NAME="faq.build.not-found" ></A ><B >5. </B > 当运行 configure 时,报告说找不到头文件或 GD 库或 gdbm,或其它的什么包! </P ></DIV ></B ><DIV CLASS="answer" ><P ><B > </B > 可以通过指定附加的选项让 configure 脚本在非标准的路径中寻找头文件和库并传递给 C 预处理器和连接器,例如: <TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><PRE CLASS="programlisting" >CPPFLAGS=-I/path/to/include LDFLAGS=-L/path/to/library ./configure</PRE ></TD ></TR ></TABLE > 如果用 csh 的变种作为你的登录 shell(为什么?),那就是: <TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><PRE CLASS="programlisting" >env CPPFLAGS=-I/path/to/include LDFLAGS=-L/path/to/library ./configure</PRE ></TD ></TR ></TABLE > </P ></DIV ></DIV ><DIV CLASS="qandaentry" ><B ><DIV CLASS="question" ><P ><A NAME="faq.build.yytname" ></A ><B >6. </B > 当编译 <TT CLASS="filename" >language-parser.tab.c</TT > 文件时,报错说 <TT CLASS="literal" >yytname undeclared</TT >。 </P ></DIV ></B ><DIV CLASS="answer" ><P ><B > </B > 需要更新 Bison 的版本。最新版本在 <A HREF="http://www.gnu.org/software/bison/bison.html" TARGET="_top" >http://www.gnu.org/software/bison/bison.html</A >。 </P ></DIV ></DIV ><DIV CLASS="qandaentry" ><B ><DIV CLASS="question" ><P ><A NAME="faq.build.link" ></A ><B >7. </B > 当我运行 <B CLASS="command" >make</B > 时,看上去一切正常,可当连接最后的程序时报告说找不到某些文件而失败了。 </P ></DIV ></B ><DIV CLASS="answer" ><P ><B > </B > 一些旧版本的 make 没有正确将 functions 目录下编译后的文件放到同一个目录下。试试运行 <B CLASS="command" >cp *.o functions</B > 然后再运行 <B CLASS="command" >make</B > 看看有没有什么帮助。如果成功了,那你确实需要更新到最新版的 GNU make。 </P ></DIV ></DIV ><DIV CLASS="qandaentry" ><B ><DIV CLASS="question" ><P ><A NAME="faq.build.undefined" ></A ><B >8. </B > 当连接 PHP 时,报告说有一些未定义的引用。 </P ></DIV ></B ><DIV CLASS="answer" ><P ><B > </B > 看看连接的这一行命令,确认所有适当的库都包括在最后了。通常可能漏掉了“-ldl”和你包括的任何数据库支持所需要的库。 </P ><P > 如果和 Apache 1.2.x 一起连接,记得把适当的信息添加到配置文件的 EXTRA_LIBS 这一行并重新运行 Apache 的配置脚本了吗?更多信息见<A HREF="install.html" >安装</A >一章。 </P ><P > 一些人也报告说在和 Apache 连接时他们不得不紧接着 <TT CLASS="filename" >libphp4.a</TT > 之后加上“-ldl”。 </P ></DIV ></DIV ><DIV CLASS="qandaentry" ><B ><DIV CLASS="question" ><P ><A NAME="faq.build.Apache" ></A ><B >9. </B > 我不知道怎样把 PHP 和 Apache 1.3 一起编译。 </P ></DIV ></B ><DIV CLASS="answer" ><P ><B > </B > 这其实很简单。小心地照着以下步骤来: <P ></P ><UL ><LI ><P > 从 <A HREF="http://www.apache.org/dist/httpd/" TARGET="_top" >http://www.apache.org/dist/httpd/</A > 下载最新版的 Apache 1.3。 </P ></LI ><LI ><P > 解压缩到某处,例如 <TT CLASS="filename" >/usr/local/src/apache-1.3</TT >。 </P ></LI ><LI ><P > 编译 PHP,先运行 <B CLASS="command" >./configure --with-apache=/<path>/apache-1.3</B >(用你 apache-1.3 所在的真实路径替换掉 <path>。) </P ></LI ><LI ><P > 输入 <B CLASS="command" >make</B > 接着是 <B CLASS="command" >make install</B > 来编译 PHP 并把必要的文件拷贝到 Apache 的源程序目录树中。 </P ></LI ><LI ><P > 改变当前目录到 <TT CLASS="filename" >/<path>/apache-1.3/src</TT > 目录并编辑 <TT CLASS="filename" >Configuration</TT > 文件。添加这一行:<TT CLASS="literal" >AddModule modules/php4/libphp4.a</TT >。 </P ></LI ><LI ><P > 输入 <B CLASS="command" >./configure</B > 接着是 <TT CLASS="literal" >make</TT >。 </P ></LI ><LI ><P > 你现在应该有一个包括 PHP 支持的 httpd 可执行程序了! </P ></LI ></UL > </P ><P > <SPAN CLASS="emphasis" ><I CLASS="emphasis" >注意:</I ></SPAN >也可以用新的 Apache <TT CLASS="literal" >./configure</TT > 脚本。参见 Apache 发行包中 <TT CLASS="literal" >README.configure</TT > 文件中的说明。也看看 PHP 发行包中的 <TT CLASS="filename" >INSTALL</TT > 文件。 </P ></DIV ></DIV ><DIV CLASS="qandaentry" ><B ><DIV CLASS="question" ><P ><A NAME="faq.build.not-running" ></A ><B >10. </B > 我按照所有的步骤在 UNIX 下安装了PHP 的 Apache 模块版本,但我的 PHP 脚本被显示在浏览器中或者提示保存此文件。 </P ></DIV ></B ><DIV CLASS="answer" ><P ><B > </B > 这说明 PHP 模块出于某些原因没有被调用。在寻求更多帮助前先检查三件事: <P ></P ><UL ><LI ><P > 确认你运行的 httpd 程序就是你刚刚编译的新 httpd 程序。运行: <TT CLASS="literal" >/path/to/binary/httpd -l</TT > </P ><P > 如果你没看到 <TT CLASS="filename" >mod_php4.c</TT > 被列出来那你就没有运行对程序。找到并正确安装程序。 </P ></LI ><LI ><P > 确认你在 <TT CLASS="literal" >Apache .conf</TT > 文件中加入了正确的 Mime 类型。应该是: <TT CLASS="literal" >AddType application/x-httpd-php3 .php3</TT >(PHP 3) </P ><P > 或者 <TT CLASS="literal" >AddType application/x-httpd-php .php</TT >(PHP 4) </P ><P > 也确认 AddType 这一行没有隐藏在 <Virtualhost> 或者 <Directory> 块中,这可能会造成你的测试脚本所在位置没有被应用到此设置。 </P ></LI ><LI ><P > 最后,Apache 1.2 和 Apache 1.3 之间默认配置文件的位置改变了。你要确认你添加 AddType 行的文件就是实际上用的。你可以在你的 <TT CLASS="filename" >httpd.conf</TT > 中添加一个明显的语法错误或者其它明显修改,这可以告诉你是否读取了正确的文件。 </P ></LI ></UL > </P ></DIV ></DIV ><DIV CLASS="qandaentry" ><B ><DIV CLASS="question" ><P ><A NAME="faq.build.activate-module" ></A ><B >11. </B > 说要用:<TT CLASS="literal" >--activate-module=src/modules/php4/libphp4.a</TT >,但是此文件根本不存在,于是我改成了 <TT CLASS="literal" >--activate-module=src/modules/php4/libmodphp4.a</TT >,结果不行。怎么回事? </P ></DIV ></B ><DIV CLASS="answer" ><P ><B > </B > 注意 <TT CLASS="filename" >libphp4.a</TT > 文件本来就不该存在,apache 进程将创建它! </P ></DIV ></DIV ><DIV CLASS="qandaentry" ><B ><DIV CLASS="question" ><P ><A NAME="faq.build.ansi" ></A ><B >12. </B > 当我用 <TT CLASS="literal" >--activate-module=src/modules/php4/libphp4.a</TT > 试着把 PHP 编译成 Apache 的静态模块时,报告说我的编译器不服从 ANSI 标准。 </P ></DIV ></B ><DIV CLASS="answer" ><P ><B > </B > 这是一个 Apache 误报的错误信息,在新的版本中已经修正了。 </P ></DIV ></DIV ><DIV CLASS="qandaentry" ><B ><DIV CLASS="question" ><P ><A NAME="faq.build.apxs" ></A ><B >13. </B > 当我用 <CODE CLASS="option" >--with-apxs</CODE > 编译 PHP 时得到奇怪的错误信息。 </P ></DIV ></B ><DIV CLASS="answer" ><P ><B > </B > 这里要检查三件事。首先,出于某些原因当 Apache 生成 apxs Perl 脚本时,有时没有正确的编译和标记变量就结束了。找到你的 apxs 脚本(用命令 <B CLASS="command" >which apxs</B >),有时会在 <TT CLASS="filename" >/usr/local/apache/bin/apxs</TT > 或者 <TT CLASS="filename" >/usr/sbin/apxs</TT >。打开并检查类似如下的行: <TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><PRE CLASS="programlisting" >my $CFG_CFLAGS_SHLIB = ' '; # substituted via Makefile.tmpl my $CFG_LD_SHLIB = ' '; # substituted via Makefile.tmpl my $CFG_LDFLAGS_SHLIB = ' '; # substituted via Makefile.tmpl</PRE ></TD ></TR ></TABLE > 如果你看到这几行,那问题就在这里。它们可能包含了仅仅空格或者其它不正确的值,例如“q()”。改成这样: <TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><PRE CLASS="programlisting" >my $CFG_CFLAGS_SHLIB = '-fpic -DSHARED_MODULE'; # substituted via Makefile.tmpl my $CFG_LD_SHLIB = 'gcc'; # substituted via Makefile.tmpl my $CFG_LDFLAGS_SHLIB = q(-shared); # substituted via Makefile.tmpl</PRE ></TD ></TR ></TABLE > 第二个可能的问题仅可能在在 Red Hat 6.1 和 6.2 中发生。Red Hat 发行的 apxs 脚本坏了。查找这一行: <TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><PRE CLASS="programlisting" >my $CFG_LIBEXECDIR = 'modules'; # substituted via APACI install</PRE ></TD ></TR ></TABLE > 如果你看到上面这一行,改成这样: <TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><PRE CLASS="programlisting" >my $CFG_LIBEXECDIR = '/usr/lib/apache'; # substituted via APACI install</PRE ></TD ></TR ></TABLE > 最后,如果你重新配置或者重装了 Apache,在 <B CLASS="command" >./configure</B > 之后和 <B CLASS="command" >make</B > 之前增加一个 <B CLASS="command" >make clean</B > 命令。 </P ></DIV ></DIV ><DIV CLASS="qandaentry" ><B ><DIV CLASS="question" ><P ><A NAME="faq.build.microtime" ></A ><B >14. </B > 在 <B CLASS="command" >make</B > 的过程中,在 microtime 中出错,还有很多 <TT CLASS="literal" >RUSAGE_</TT > 之类的东西。 </P ></DIV ></B ><DIV CLASS="answer" ><P ><B > </B > 如果 <B CLASS="command" >make</B > 时遇到类似这样的问题: <TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><PRE CLASS="programlisting" >microtime.c: In function `php_if_getrusage': microtime.c:94: storage size of `usg' isn't known microtime.c:97: `RUSAGE_SELF' undeclared (first use in this function) microtime.c:97: (Each undeclared identifier is reported only once microtime.c:97: for each function it appears in.) microtime.c:103: `RUSAGE_CHILDREN' undeclared (first use in this function) make[3]: *** [microtime.lo] Error 1 make[3]: Leaving directory `/home/master/php-4.0.1/ext/standard' make[2]: *** [all-recursive] Error 1 make[2]: Leaving directory `/home/master/php-4.0.1/ext/standard' make[1]: *** [all-recursive] Error 1 make[1]: Leaving directory `/home/master/php-4.0.1/ext' make: *** [all-recursive] Error 1</PRE ></TD ></TR ></TABLE > </P ><P > 你的系统坏了。你需要安装一个符合你的 glibc 的 glibc-devel 包来修复 <TT CLASS="filename" >/usr/include</TT > 中的文件。这和 PHP 绝对没有任何关系。要证实这一点,试试这个简单的测试: <TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><PRE CLASS="programlisting" >$ cat >test.c <<X #include <sys/resource.h> X $ gcc -E test.c >/dev/null</PRE ></TD ></TR ></TABLE > 如果出现错误,那你就知道头文件坏了。 </P ></DIV ></DIV ><DIV CLASS="qandaentry" ><B ><DIV CLASS="question" ><P ><A NAME="faq.build.mysql.tempnam" ></A ><B >15. </B > 当带 MySQL 编译 PHP 时,可以正确地运行配置,但是在 <TT CLASS="literal" >make</TT > 的过程中出现了类似以下的错误信息: <SPAN CLASS="emphasis" ><I CLASS="emphasis" >ext/mysql/libmysql/my_tempnam.o(.text+0x46): In function my_tempnam': /php4/ext/mysql/libmysql/my_tempnam.c:103: the use of tempnam' is dangerous, better use mkstemp'</I ></SPAN >,这是怎么回事 </P ></DIV ></B ><DIV CLASS="answer" ><P ><B > </B > 首先,我们需要认识到这只是个<TT CLASS="literal" >警告</TT >,而非致命错误。由于这条信息通常是在 <TT CLASS="literal" >make</TT > 的最后输出的,所以看起来它可能像是一个致命错误,但实际上不是。当然,如果将编译器设置成遇见警告信息时停止,则这也可以算是致命错误。另外值得一提的是,MySQL 的支持是默认打开的。 </P ><DIV CLASS="note" ><BLOCKQUOTE CLASS="note" ><P ><B >注意: </B > 自 PHP 4.3.2 起,你将在编译(make)结束后看到下面的文字: </P ><P > <TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><PRE CLASS="screen" >Build complete. (It is safe to ignore warnings about tempnam and tmpnam).</PRE ></TD ></TR ></TABLE > </P ></BLOCKQUOTE ></DIV ></DIV ></DIV ><DIV CLASS="qandaentry" ><B ><DIV CLASS="question" ><P ><A NAME="faq.build.upgrade" ></A ><B >16. </B > 我想升级我的 PHP。上哪里找到我用来配置目前的 PHP 的 <B CLASS="command" >./configure</B > 的参数呢? </P ></DIV ></B ><DIV CLASS="answer" ><P ><B > </B > 要么在你当前的 PHP 的安装目录查看 config.nice 文件,如果没有,只要运行此脚本: <TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><code><font color="#000000"> <font color="#0000BB"><?php phpinfo</font><font color="#007700">(); </font><font color="#0000BB">?></font> </font> </code></TD ></TR ></TABLE > 在输出的顶端显示了用来配置此 PHP 的 <B CLASS="command" >./configure</B > 参数。 </P ></DIV ></DIV ><DIV CLASS="qandaentry" ><B ><DIV CLASS="question" ><P ><A NAME="faq.build.gdlibs" ></A ><B >17. </B > 和 GD 库一起编译 PHP 时,要么给出一个奇怪的编译错误,要么在运行时出现 segfaults。 </P ></DIV ></B ><DIV CLASS="answer" ><P ><B > </B > 确保你的 GD 库和 PHP 在连接时使用了用同样的支持库(例如 libpng)。 </P ></DIV ></DIV ><DIV CLASS="qandaentry" ><B ><DIV CLASS="question" ><P ><A NAME="faq.installation.needgnu" ></A ><B >18. </B > 当编译 PHP 时我看到一些随机的错误,好像死了。我用的是 Solaris,不知道有没有关系。 </P ></DIV ></B ><DIV CLASS="answer" ><P ><B > </B > 当编译 PHP 时使用非 GNU 的工具会导致问题。确保使用 GNU 工具来确保能够正确编译 PHP。例如,在 Solaris 下面不论使用 SunOS BSD 兼容或者 Solaris 版本的 <TT CLASS="literal" >sed</TT > 都不行,但是使用 GNU 或者 Sun POSIX (xpg4) 版本的 <TT CLASS="literal" >sed</TT > 就可以。相关连接:<A HREF="http://www.gnu.org/software/sed/sed.html" TARGET="_top" >GNU sed</A >,<A HREF="http://www.gnu.org/software/flex/flex.html" TARGET="_top" >GNU flex</A >,<A HREF="http://www.gnu.org/software/bison/bison.html" TARGET="_top" >GNU bison</A >。 </P ></DIV ></DIV ></DIV ></DIV ><DIV CLASS="NAVFOOTER" ><HR ALIGN="LEFT" WIDTH="100%"><TABLE SUMMARY="Footer navigation table" WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" ><A HREF="faq.installation.html" ACCESSKEY="P" >上一页</A ></TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" ><A HREF="index.html" ACCESSKEY="H" >起始页</A ></TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" ><A HREF="faq.using.html" ACCESSKEY="N" >下一页</A ></TD ></TR ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" >安装常见问题</TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" ><A HREF="faq.html" ACCESSKEY="U" >上一级</A ></TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" >使用 PHP</TD ></TR ></TABLE ></DIV ></BODY ></HTML >