Sophie

Sophie

distrib > Mandriva > 2008.1 > x86_64 > by-pkgid > 05cd670d8a02b2b4a0ffb1756f2e8308 > files > 39

php-manual-zh-5.2.4-1mdv2008.1.noarch.rpm

<!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
>&#13;  本节汇集了大多数编译时出现的常见错误。
 </P
><DIV
CLASS="qandaset"
><DL
><DT
>1. <A
HREF="faq.build.html#faq.build.configure"
>&#13;     我用匿名 CVS 得到了最新版的 PHP,但是里面没有 configure 脚本!
    </A
></DT
><DT
>2. <A
HREF="faq.build.html#faq.build.configuring"
>&#13;     我在配置 PHP 和 Apache 一起工作时遇到了问题。说没找到
     <TT
CLASS="filename"
>httpd.h</TT
>,但这个文件明明就在那里!
    </A
></DT
><DT
>3. <A
HREF="faq.build.html#faq.build.lex"
>&#13;     当运行 PHP 配置时(<TT
CLASS="literal"
>./configure</TT
>),遇到类似如下的问题:
    </A
></DT
><DT
>4. <A
HREF="faq.build.html#faq.build.apache-sharedcore"
>&#13;     当试图启动 Apache 时,得到类似如下错误信息:
    </A
></DT
><DT
>5. <A
HREF="faq.build.html#faq.build.not-found"
>&#13;     当运行 configure 时,报告说找不到头文件或 GD 库或 gdbm,或其它的什么包!
    </A
></DT
><DT
>6. <A
HREF="faq.build.html#faq.build.yytname"
>&#13;     当编译 <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"
>&#13;     当我运行 <B
CLASS="command"
>make</B
>
     时,看上去一切正常,可当连接最后的程序时报告说找不到某些文件而失败了。
    </A
></DT
><DT
>8. <A
HREF="faq.build.html#faq.build.undefined"
>&#13;     当连接 PHP 时,报告说有一些未定义的引用。
    </A
></DT
><DT
>9. <A
HREF="faq.build.html#faq.build.Apache"
>&#13;     我不知道怎样把 PHP 和 Apache 1.3 一起编译。
    </A
></DT
><DT
>10. <A
HREF="faq.build.html#faq.build.not-running"
>&#13;     我按照所有的步骤在 UNIX 下安装了PHP 的 Apache 模块版本,但我的 PHP
     脚本被显示在浏览器中或者提示保存此文件。
    </A
></DT
><DT
>11. <A
HREF="faq.build.html#faq.build.activate-module"
>&#13;     说要用:<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"
>&#13;     当我用 <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"
>&#13;     当我用 <CODE
CLASS="option"
>--with-apxs</CODE
> 编译 PHP 时得到奇怪的错误信息。
    </A
></DT
><DT
>14. <A
HREF="faq.build.html#faq.build.microtime"
>&#13;    在 <B
CLASS="command"
>make</B
> 的过程中,在 microtime 中出错,还有很多
    <TT
CLASS="literal"
>RUSAGE_</TT
> 之类的东西。
   </A
></DT
><DT
>15. <A
HREF="faq.build.html#faq.build.mysql.tempnam"
>&#13;     当带 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"
>&#13;     我想升级我的 PHP。上哪里找到我用来配置目前的 PHP 的
     <B
CLASS="command"
>./configure</B
> 的参数呢?
    </A
></DT
><DT
>17. <A
HREF="faq.build.html#faq.build.gdlibs"
>&#13;     和 GD 库一起编译 PHP 时,要么给出一个奇怪的编译错误,要么在运行时出现 segfaults。
    </A
></DT
><DT
>18. <A
HREF="faq.build.html#faq.installation.needgnu"
>&#13;     当编译 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
>&#13;     <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
>&#13;     <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
>&#13;     <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
>&#13;     更多信息,请阅读 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
>&#13;     如果和 Apache 1.2.x 一起连接,记得把适当的信息添加到配置文件的 EXTRA_LIBS
     这一行并重新运行 Apache
     的配置脚本了吗?更多信息见<A
HREF="install.html"
>安装</A
>一章。
    </P
><P
>&#13;     一些人也报告说在和 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
>&#13;        从 <A
HREF="http://www.apache.org/dist/httpd/"
TARGET="_top"
>http://www.apache.org/dist/httpd/</A
>
        下载最新版的 Apache 1.3。
       </P
></LI
><LI
><P
>&#13;        解压缩到某处,例如 <TT
CLASS="filename"
>/usr/local/src/apache-1.3</TT
>。
       </P
></LI
><LI
><P
>&#13;        编译 PHP,先运行
        <B
CLASS="command"
>./configure --with-apache=/&#60;path&#62;/apache-1.3</B
>(用你
        apache-1.3 所在的真实路径替换掉 &#60;path&#62;。)
       </P
></LI
><LI
><P
>&#13;        输入 <B
CLASS="command"
>make</B
> 接着是 <B
CLASS="command"
>make install</B
>
        来编译 PHP 并把必要的文件拷贝到 Apache 的源程序目录树中。
       </P
></LI
><LI
><P
>&#13;        改变当前目录到 <TT
CLASS="filename"
>/&#60;path&#62;/apache-1.3/src</TT
>
        目录并编辑 <TT
CLASS="filename"
>Configuration</TT
>
        文件。添加这一行:<TT
CLASS="literal"
>AddModule modules/php4/libphp4.a</TT
>。
       </P
></LI
><LI
><P
>&#13;        输入 <B
CLASS="command"
>./configure</B
> 接着是 <TT
CLASS="literal"
>make</TT
>。
       </P
></LI
><LI
><P
>&#13;        你现在应该有一个包括 PHP 支持的 httpd 可执行程序了!
       </P
></LI
></UL
>
    </P
><P
>&#13;     <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
>&#13;        确认你运行的 httpd 程序就是你刚刚编译的新 httpd 程序。运行:
        <TT
CLASS="literal"
>/path/to/binary/httpd -l</TT
>
       </P
><P
>&#13;        如果你没看到 <TT
CLASS="filename"
>mod_php4.c</TT
>
        被列出来那你就没有运行对程序。找到并正确安装程序。
       </P
></LI
><LI
><P
>&#13;        确认你在 <TT
CLASS="literal"
>Apache .conf</TT
> 文件中加入了正确的 Mime 类型。应该是:
        <TT
CLASS="literal"
>AddType application/x-httpd-php3 .php3</TT
>(PHP 3)
       </P
><P
>&#13;        或者 <TT
CLASS="literal"
>AddType application/x-httpd-php .php</TT
>(PHP 4)
       </P
><P
>&#13;        也确认 AddType 这一行没有隐藏在 &#60;Virtualhost&#62; 或者
        &#60;Directory&#62; 块中,这可能会造成你的测试脚本所在位置没有被应用到此设置。
       </P
></LI
><LI
><P
>&#13;        最后,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
>&#13;    你的系统坏了。你需要安装一个符合你的 glibc 的 glibc-devel 包来修复
    <TT
CLASS="filename"
>/usr/include</TT
>
    中的文件。这和 PHP 绝对没有任何关系。要证实这一点,试试这个简单的测试:
    <TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
CELLPADDING="5"
><TR
><TD
><PRE
CLASS="programlisting"
>$ cat &#62;test.c &#60;&#60;X
#include &#60;sys/resource.h&#62;
X
$ gcc -E test.c &#62;/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
>&#13;      <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">&lt;?php phpinfo</font><font color="#007700">(); </font><font color="#0000BB">?&gt;</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
>