<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/faq.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'pt_BR',
  ),
  'this' => 
  array (
    0 => 'faq.build.php',
    1 => 'Problemas de Compila&ccedil;&atilde;o',
    2 => 'Problemas de Compila&ccedil;&atilde;o',
  ),
  'up' => 
  array (
    0 => 'faq.php',
    1 => 'FAQ',
  ),
  'prev' => 
  array (
    0 => 'faq.installation.php',
    1 => 'Instala&ccedil;&atilde;o',
  ),
  'next' => 
  array (
    0 => 'faq.using.php',
    1 => 'Utilizando o PHP',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'pt_BR',
    'path' => 'faq/build.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="faq.build" class="chapter">
  <h1 class="title">Problemas de Compilação</h1>

  

  <p class="para">
   Esta seção reúne os erros mais comuns que ocorrem
   na compilação.
  </p>

  <div class="qandaset"><ol class="qandaset_questions"><li><a href="#faq.build.configure">
     
      Eu peguei a &uacute;ltima vers&atilde;o do PHP usando o servi&ccedil;o an&ocirc;nimo do GIT,
      mas n&atilde;o h&aacute; nenhum script de configura&ccedil;&atilde;o!
     
    </a></li><li><a href="#faq.build.configuring">
     
      Estou tendo problemas para configurar o PHP para trabalhar com Apache.
      Diz que n&atilde;o consegue encontrar httpd.h, mas est&aacute; bem onde eu disse que est&aacute;!
     
    </a></li><li><a href="#faq.build.lex">
     
      Se enquanto estiver configurando o (./configure) do PHP, voc&ecirc; se deparar com
      um erro semelhante ao seguinte:
     
     
      
       checking lex output file root... ./configure: lex: command not found
       configure: error: cannot find output from lex; giving up
      
     
    </a></li><li><a href="#faq.build.apache-sharedcore">
     
      Quando tento iniciar o Apache, recebo a seguinte mensagem:
     
     
      
       fatal: relocation error: file /path/to/libphp4.so:
       symbol ap_block_alarms: referenced symbol not found
      
     
    </a></li><li><a href="#faq.build.not-found">
     
      Quando eu executo configure, ele diz que n&atilde;o pode encontrar os
      arquivos de inclus&atilde;o ou a biblioteca GD, gdbm, ou algum outro pacote!
     
    </a></li><li><a href="#faq.build.yytname">
     
      Quando se est&aacute; compilando o arquivo language-parser.tab.c, ele me devolve um erro
      que diz yytname undeclared.
     
    </a></li><li><a href="#faq.build.link">
     
      Quando eu executo make, parece rodar bem mas ent&atilde;o falha quando tenta
      ligar a aplica&ccedil;&atilde;o final, queixando-se que n&atilde;o consegue encontrar alguns arquivos.
     
    </a></li><li><a href="#faq.build.undefined">
     
      Quando linkando o PHP, ele reclama de um n&uacute;mero de refer&ecirc;ncias indefinidas.
     
    </a></li><li><a href="#faq.build.not-running">
     
      Eu segui todos os passos da instala&ccedil;&atilde;o do m&oacute;dulo da vers&atilde;o do Apache no
      Unix, e meus scripts PHP est&atilde;o sendo mostrados no meu navegador ou me &eacute; solicitado
      salvar os arquivos.
     
    </a></li><li><a href="#faq.build.activate-module">
     
      L&aacute; diz para usar: --activate-module=src/modules/php4/libphp4.a,
      mas esse arquivo n&atilde;o existe, ent&atilde;o mudei para
      --activate-module=src/modules/php4/libmodphp4.a e
      n&atilde;o funciona!? O que est&aacute; acontecendo?
     
    </a></li><li><a href="#faq.build.ansi">
     
      Quando tento compilar o Apache com o PHP como um m&oacute;dulo est&aacute;tico usando
      --activate-module=src/modules/php4/libphp4.a
      ele me diz que o meu compilador n&atilde;o &eacute; compat&iacute;vel com ANSI.
     
    </a></li><li><a href="#faq.build.apxs">
     
      Quando tento compilar o PHP usando --with-apxs recebo mensagens de erro estranhas.
     
    </a></li><li><a href="#faq.build.microtime">
     
      Durante make, eu recebo erros no microtime,
      e um monte de RUSAGE_.
     
    </a></li><li><a href="#faq.build.mysql.tempnam">
     
      Ao compilar o PHP com MySQL, o configure vai bem, mas durante o
      make recebo um erro semelhante ao seguinte:
      ext/mysql/libmysqlclient/my_tempnam.o(.text+0x46): In function
      my_tempnam&#039;: /php4/ext/mysql/libmysqlclient/my_tempnam.c:103: the
      use of tempnam&#039; is dangerous, better use mkstemp&#039;,
      o que est&aacute; errado ?
     
    </a></li><li><a href="#faq.build.upgrade">
     
      Eu quero atualizar o meu PHP. Onde posso encontrar a linha ./configure
      que foi usada para compilar a minha instala&ccedil;&atilde;o atual do PHP?
     
    </a></li><li><a href="#faq.build.gdlibs">
     
      Quando compilo o PHP com a biblioteca GD retorna erros de compila&ccedil;&atilde;o
      ou segfaults na execu&ccedil;&atilde;o.
     
    </a></li><li><a href="#faq.installation.needgnu">
     
      Ao compilar o PHP eu recebo erros aparentemente aleat&oacute;rios, como se ele travasse.
      Estou usando o Solaris, se isso importa.
     
    </a></li></ol></div>
   <dl class="qandaentry" id="faq.build.configure">
    <dt><strong>
     
      Eu peguei a última versão do PHP usando o serviço anônimo do GIT,
      mas não há nenhum script de configuração!
     
    </strong></dt>
    <dd class="answer">
     <p class="para">
      Você precisa ter o pacote GNU autoconf instalado para que possa
      gerar o script configure a partir do <var class="filename">configure.in</var>. Basta executar
      <strong class="command">./buildconf</strong> no diretório raiz após a obtenção
      do código fonte do servidor do GIT. (Além disso, a menos que você execute com <strong class="command">configure</strong>
      com a opção <code class="literal">--enable-maintainer-mode</code>, o
      script configure não será automaticamente recompilado quando
      o arquivo <var class="filename">configure.in</var> for atualizado, então você deve certificar-se de fazer isso
      manualmente quando você perceber que o <var class="filename">configure.in</var> mudou. Um sintoma
      disso é encontrar coisas como @VARIABLE@ em seu Makefile após
      configure ou <var class="filename">config.status</var>tiver sido executado.)
     </p>
    </dd>
   </dl>

   <dl class="qandaentry" id="faq.build.configuring">
    <dt><strong>
     
      Estou tendo problemas para configurar o PHP para trabalhar com Apache.
      Diz que não consegue encontrar <var class="filename">httpd.h</var>, mas está bem onde eu disse que está!
     
    </strong></dt>
    <dd class="answer">
     <p class="para">
      Você precisa informar ao script configure/setup a localização do
      diretório raíz do Apache. Isto significa que você precisa especificar
      <strong class="option configure">--with-apache=/caminho/para/apache</strong>
      e <em>não</em> <strong class="option configure">--with-apache=/caminho/para/apache/src</strong>.
     </p>
    </dd>
   </dl>

   <dl class="qandaentry" id="faq.build.lex">
    <dt><strong>
     
      Se enquanto estiver configurando o (<code class="literal">./configure</code>) do PHP, você se deparar com
      um erro semelhante ao seguinte:
     
     
      <div class="example-contents screen"><br />
       checking lex output file root... ./configure: lex: command not found<br />
       configure: error: cannot find output from lex; giving up<br />
      </div>
     
    </strong></dt>
    <dd class="answer">
     <p class="para">
      Não deixe de ler as instruções de <a href="install.unix.php" class="link">instalação</a>
      cuidadosamente e note que você precisa de ambos flex e bison
      instalados para compilar o PHP. Dependendo da sua configuração você irá instalar
      bison e flex a partir de uma fonte ou pacote, como um RPM.
     </p>
    </dd>
   </dl>

   <dl class="qandaentry" id="faq.build.apache-sharedcore">
    <dt><strong>
     
      Quando tento iniciar o Apache, recebo a seguinte mensagem:
     
     
      <div class="example-contents screen"><br />
       fatal: relocation error: file /path/to/libphp4.so:<br />
       symbol ap_block_alarms: referenced symbol not found<br />
      </div>
     
    </strong></dt>
    <dd class="answer">
     <p class="para">
      Esse erro geralmente aparece quando um compila o core do Apache
      como uma biblioteca DSO para uso compartilhado. Tente
      reconfigurar o apache, certificando-se de usar pelo menos um dos
      seguintes parâmetros:
     </p>
     <p class="para">
      <div class="example-contents screen"><br />
      --enable-shared=max --enable-rule=SHARED_CORE<br />
      </div>
     </p>
     <p class="para">
      Para obter mais informações, leia o arquivo <var class="filename">INSTALL</var>
      que se encontra na pasta raíz do Apache ou a
      <a href="http://httpd.apache.org/docs/current/dso.html" class="link external">&raquo;&nbsp;página sobre DSO</a> no manual do Apache.
     </p>
    </dd>
   </dl>

   <dl class="qandaentry" id="faq.build.not-found">
    <dt><strong>
     
      Quando eu executo configure, ele diz que não pode encontrar os
      arquivos de inclusão ou a biblioteca GD, gdbm, ou algum outro pacote!
     
    </strong></dt>
    <dd class="answer">
     <p class="para">
      Você pode fazer o script &#039;configure&#039; procurar por arquivos de cabeçalho e bibliotecas
      em locais diferentes, especificando parâmetros adicionais para passar para
      o pré-processador C e linker, tais como:
      <div class="example-contents">
<div class="cdata"><pre>
    CPPFLAGS=-I/path/to/include LDFLAGS=-L/path/to/library ./configure
</pre></div>
      </div>

      Se uma variante csh estiver sendo usada no seu shell de login (por quê?), o comando seria:
      <div class="example-contents">
<div class="cdata"><pre>
    env CPPFLAGS=-I/path/to/include LDFLAGS=-L/path/to/library ./configure
</pre></div>
      </div>

     </p>
    </dd>
   </dl>

   <dl class="qandaentry" id="faq.build.yytname">
    <dt><strong>
     
      Quando se está compilando o arquivo <var class="filename">language-parser.tab.c</var>, ele me devolve um erro
      que diz <code class="literal">yytname undeclared</code>.
     
    </strong></dt>
    <dd class="answer">
     <p class="para">
      Você precisa atualizar sua versão do Bison. Você pode encontrar a última versão
      em <a href="http://www.gnu.org/software/bison/bison.html" class="link external">&raquo;&nbsp;http://www.gnu.org/software/bison/bison.html</a>.
     </p>
    </dd>
   </dl>

   <dl class="qandaentry" id="faq.build.link">
    <dt><strong>
     
      Quando eu executo <strong class="command">make</strong>, parece rodar bem mas então falha quando tenta
      ligar a aplicação final, queixando-se que não consegue encontrar alguns arquivos.
     
    </strong></dt>
    <dd class="answer">
     <p class="para">
      Algumas versões antigas do make que não colocam corretamente a versão
      compilada dos arquivos nos diretórios das funções dentro do mesmo
      diretório. Tente rodar <strong class="command">cp *.o functions</strong> e então
      execute novamente <strong class="command">make</strong> para ver se isso ajuda. Se não ajudar, você realmente deve
      atualizar para uma versão mais recente do GNU make.
     </p>
    </dd>
   </dl>

   <dl class="qandaentry" id="faq.build.undefined">
    <dt><strong>
     
      Quando linkando o PHP, ele reclama de um número de referências indefinidas.
     
    </strong></dt>
    <dd class="answer">
     <p class="para">
      Confira a linha do link e tenha certeza que todas as bibliotecas
      apropriadas estão sendo incluídas no final. É comum que talvez você tenha
      esquecido os &#039;-ldl&#039; e qualquer biblioteca requerida para qualquer suporte de banco de dados
      que você incluiu.
     </p>
     <p class="para">
      Algumas pessoas também reportaram que elas precisaram adicionar &#039;-ldl&#039; imediatamente
      seguindo <var class="filename">libphp4.a</var> quando linkando com o Apache.
     </p>
    </dd>
   </dl>

   <dl class="qandaentry" id="faq.build.not-running">
    <dt><strong>
     
      Eu segui todos os passos da instalação do módulo da versão do Apache no
      Unix, e meus scripts PHP estão sendo mostrados no meu navegador ou me é solicitado
      salvar os arquivos.
     
    </strong></dt>
    <dd class="answer">
     <p class="para">
      Isso significa que o módulo do PHP não está sendo chamado por alguma razão.
      Três coisas para se verificar antes de pedir por mais ajuda:
      <ul class="itemizedlist">
       <li class="listitem">
        <span class="simpara">
         Tenha certeza que o binário httpd que você está executando é o
         que você acabou de compilar. Para fazer isso, tente executar:
         <code class="literal">/path/to/binary/httpd -l</code>
        </span>
        <span class="simpara">
         Se você não vê <var class="filename">mod_php4.c</var> na lista, então
         você não está executando o binário correto. Encontre e instale o
         binário correto.
        </span>
       </li>
       <li class="listitem">
        <span class="simpara">
         Certifique-se de ter adicionado o Mime Type correto em um dos seus
         arquivos <code class="literal">Apache .conf</code>. Deveria ser:
         <code class="literal">AddType application/x-httpd-php .php</code>
        </span>
        <span class="simpara">
         Também certifique-se que esta linha AddType não esteja escondida dentro de um
         bloco &lt;Virtualhost&gt; ou &lt;Directory&gt; que possam
         impedí-la de ser aplicada para a localização de seu script de teste.
        </span>
       </li>
       <li class="listitem">
        <span class="simpara">
         Finalmente, a localização padrão dos arquivos de configuração do Apache
         mudou entre o Apache 1.2 e Apache 1.3. Você deve verificar para ter certeza
         que o arquivo de configuração que você está adicionando à linha do AddType
         realmente está sendo lido. Você pode colocar um erro de sintaxe óbvio
         em seu arquivo <var class="filename">httpd.conf</var> ou alguma outra mudança evidente que
         diga se o arquivo está sendo lido corretamente.
        </span>
       </li>
      </ul>
     </p>
    </dd>
   </dl>

   <dl class="qandaentry" id="faq.build.activate-module">
    <dt><strong>
     
      Lá diz para usar: <code class="literal">--activate-module=src/modules/php4/libphp4.a</code>,
      mas esse arquivo não existe, então mudei para
      <code class="literal">--activate-module=src/modules/php4/libmodphp4.a</code> e
      não funciona!? O que está acontecendo?
     
    </strong></dt>
    <dd class="answer">
     <p class="para">
      Note que o arquivo <var class="filename">libphp4.a</var> não é para existir. O
      processo apache irá criá-lo!
     </p>
    </dd>
   </dl>

   <dl class="qandaentry" id="faq.build.ansi">
    <dt><strong>
     
      Quando tento compilar o Apache com o PHP como um módulo estático usando
      <code class="literal">--activate-module=src/modules/php4/libphp4.a</code>
      ele me diz que o meu compilador não é compatível com ANSI.
     
    </strong></dt>
    <dd class="answer">
     <p class="para">
      Esta é uma mensagem de erro enganosa do Apache que foi corrigida
      nas versões mais recentes.
     </p>
    </dd>
   </dl>

   <dl class="qandaentry" id="faq.build.apxs">
    <dt><strong>
     
      Quando tento compilar o PHP usando <strong class="option configure">--with-apxs</strong> recebo mensagens de erro estranhas.
     
    </strong></dt>
    <dd class="answer">
     <p class="para">
      Há três coisas para verificar aqui. Em primeiro lugar, por alguma razão
      o Apache quando compila o script Perl apxs, às vezes acaba
      sendo compilado sem o compilador e os parâmetros corretos.
      Procure pelo seu script apxs (tente o comando <strong class="command">which apxs</strong>),
      às vezes é encontrado em <var class="filename">/usr/local/apache/bin/apxs</var>
      ou <var class="filename">/usr/sbin/apxs</var>.
      Abra-o e verifique se existem linhas semelhantes a estas:
      <div class="example-contents">
<div class="cdata"><pre>
my $CFG_CFLAGS_SHLIB  = &#039; &#039;;          # substituted via Makefile.tmpl
my $CFG_LD_SHLIB      = &#039; &#039;;          # substituted via Makefile.tmpl
my $CFG_LDFLAGS_SHLIB = &#039; &#039;;          # substituted via Makefile.tmpl
</pre></div>
      </div>

      Se é isso que você vê, você encontrou o seu problema. Elas podem
      conter apenas espaços ou outros valores incorretos, como &#039;q()&#039;. Altere
      estas linhas de modo que fiquem assim:
      <div class="example-contents">
<div class="cdata"><pre>
my $CFG_CFLAGS_SHLIB  = &#039;-fpic -DSHARED_MODULE&#039;; # substituted via Makefile.tmpl
my $CFG_LD_SHLIB      = &#039;gcc&#039;;                   # substituted via Makefile.tmpl
my $CFG_LDFLAGS_SHLIB = q(-shared);              # substituted via Makefile.tmpl
</pre></div>
      </div>

      O segundo problema possível só deve ser um problema no Red Hat 6.1
      e 6.2. O script apxs do Red Hat está quebrado. Procure por esta linha:
      <div class="example-contents">
<div class="cdata"><pre>
my $CFG_LIBEXECDIR    = &#039;modules&#039;;         # substituted via APACI install
</pre></div>
      </div>

      Se você vê a linha acima, mude para isto:
      <div class="example-contents">
<div class="cdata"><pre>
my $CFG_LIBEXECDIR    = &#039;/usr/lib/apache&#039;; # substituted via APACI install
</pre></div>
      </div>

       Finalmente, se você reconfigurar/reinstalar o Apache, adicione <strong class="command">make clean</strong>
       ao processo após o <strong class="command">./configure</strong> e antes de <strong class="command">make</strong>.
     </p>
    </dd>
   </dl>

   <dl class="qandaentry" id="faq.build.microtime">
    <dt><strong>
     
      Durante <strong class="command">make</strong>, eu recebo erros no microtime,
      e um monte de <code class="literal">RUSAGE_</code>.
     
    </strong></dt>
    <dd class="answer">
     <p class="para">
      Enquanto é executada a porção <strong class="command">make</strong> da instalação,
      se você encontrar problemas que parecem semelhantes a estes:
      <div class="example-contents">
<div class="cdata"><pre>
microtime.c: In function `php_if_getrusage&#039;:
microtime.c:94: storage size of `usg&#039; isn&#039;t known
microtime.c:97: `RUSAGE_SELF&#039; 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&#039; undeclared (first use in this function)
make[3]: *** [microtime.lo] Error 1
make[3]: Leaving directory `/home/master/php-4.0.1/ext/standard&#039;
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory `/home/master/php-4.0.1/ext/standard&#039;
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/master/php-4.0.1/ext&#039;
make: *** [all-recursive] Error 1
</pre></div>
      </div>

     </p>
     <p class="para">
      Seu sistema está quebrado. É preciso corrigir os arquivos <var class="filename">/usr/include</var>
      instalando o pacote glibc-devel que corresponde ao seu glibc. Isto não tem
      absolutamente nada a ver com o PHP. Para provar isso a si mesmo, tente este
      teste simples:
     <div class="example-contents">
<div class="cdata"><pre>
$ cat &gt;test.c &lt;&lt;X
#include &lt;sys/resource.h&gt;
X
$ gcc -E test.c &gt;/dev/null
</pre></div>
      </div>

      Se isso mostrar erros, você saberá que os arquivos include estão bagunçados.
     </p>
    </dd>
   </dl>

   <dl class="qandaentry" id="faq.build.mysql.tempnam">
    <dt><strong>
     
      Ao compilar o PHP com MySQL, o configure vai bem, mas durante o
      <code class="literal">make</code> recebo um erro semelhante ao seguinte:
      <em>ext/mysql/libmysqlclient/my_tempnam.o(.text+0x46): In function
      my_tempnam&#039;: /php4/ext/mysql/libmysqlclient/my_tempnam.c:103: the
      use of tempnam&#039; is dangerous, better use mkstemp&#039;</em>,
      o que está errado ?
     
    </strong></dt>
    <dd class="answer">
     <p class="para">
      Primeiramente, é importante perceber que este é um <code class="literal">
      Warning</code> e não um erro fatal. Porque esta é
      muitas vezes a última saída durante o <code class="literal">make</code>,
      ela pode parecer um erro fatal, mas não é. Claro que, se
      você definir o seu compilador para parar em warnings, ele vai parar. Além disso,
      tenha sempre em mente que o suporte ao MySQL está habilitado por padrão.
     </p>
     <blockquote class="note"><p><strong class="note">Nota</strong>: 
      <p class="para">
       A partir do PHP 4.3.2, você também verá o seguinte texto depois
       que a compilação (make) for concluída:
      </p>
      <p class="para">
       <div class="example-contents screen"><br />
        Build complete.<br />
        (It is safe to ignore warnings about tempnam and tmpnam).<br />
       </div>
      </p>
     </p></blockquote>
    </dd>
   </dl>

   <dl class="qandaentry" id="faq.build.upgrade">
    <dt><strong>
     
      Eu quero atualizar o meu PHP. Onde posso encontrar a linha <strong class="command">./configure</strong>
      que foi usada para compilar a minha instalação atual do PHP?
     
    </strong></dt>
    <dd class="answer">
     <p class="para">
      Ou você olha no arquivo config.nice, na pasta raíz atual da sua instalação do PHP,
      ou, se este não estiver disponível, basta executar um script
      <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php phpinfo</span><span style="color: #007700">(); </span><span style="color: #0000BB">?&gt;</span></span></code></div>
      </div>

      No topo da saída a linha <strong class="command">./configure</strong> que foi usada
      para compilar esta instalação do PHP é mostrada.
     </p>
    </dd>
   </dl>

   <dl class="qandaentry" id="faq.build.gdlibs">
    <dt><strong>
     
      Quando compilo o PHP com a biblioteca GD retorna erros de compilação
      ou segfaults na execução.
     
    </strong></dt>
    <dd class="answer">
     <p class="para">
      Certifique-se de que sua biblioteca GD e o PHP estejam ligadas às mesmas
      bibliotecas dependentes (libpng por exemplo).
     </p>
    </dd>
   </dl>

   <dl class="qandaentry" id="faq.installation.needgnu">
    <dt><strong>
     
      Ao compilar o PHP eu recebo erros aparentemente aleatórios, como se ele travasse.
      Estou usando o Solaris, se isso importa.
     
    </strong></dt>
    <dd class="answer">
     <p class="para">
      Usar utilitários que não são GNU ao compilar o PHP pode causar problemas.
      Certifique-se de usar as ferramentas GNU, a fim de ter certeza de que a compilação do PHP
      funcionará. Por exemplo, no Solaris, usando tanto o SunOS BSD-compatible
      quanto versões do Solaris <code class="literal">sed</code> não vai funcionar, mas usando
      as versões GNU ou Sun POSIX (XPG4) do <code class="literal">sed</code> irá funcionar.
      Links: <a href="http://www.gnu.org/software/sed/sed.html" class="link external">&raquo;&nbsp;GNU sed</a>,
      <a href="http://www.gnu.org/software/flex/flex.html" class="link external">&raquo;&nbsp;GNU flex</a>, e
      <a href="http://www.gnu.org/software/bison/bison.html" class="link external">&raquo;&nbsp;GNU bison</a>.
     </p>
    </dd>
   </dl>
  
 </div>
<?php manual_footer($setup); ?>