<?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 => 'es',
  ),
  'this' => 
  array (
    0 => 'faq.build.php',
    1 => 'Problemas de Compilaci&oacute;n',
    2 => 'Problemas de Compilaci&oacute;n',
  ),
  'up' => 
  array (
    0 => 'faq.php',
    1 => 'FAQ',
  ),
  'prev' => 
  array (
    0 => 'faq.installation.php',
    1 => 'Instalaci&oacute;n',
  ),
  'next' => 
  array (
    0 => 'faq.using.php',
    1 => 'Usar PHP',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'es',
    '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 Compilación</h1>

  

  <p class="para">
   Esta sección reune la mayoría de errores que ocurren al
   momento de compilar.
  </p>

  <div class="qandaset"><ol class="qandaset_questions"><li><a href="#faq.build.configure">
     
      Tengo la &uacute;ltima versi&oacute;n de PHP usando el servicio an&oacute;nimo Git,
      pero no hay un script de configuraci&oacute;n.
     
    </a></li><li><a href="#faq.build.configuring">
     
      Tengo problemas configurando PHP para que trabaje con Apache.
      Dice que no puede encontrar el httpd.h, pero esta justo donde
      digo que esta!
     
    </a></li><li><a href="#faq.build.lex">
     
      Mientras se configura PHP (./configure), se devuelve
      un error similar al siguiente:
     
     
      
       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">
     
      Cuando intento iniciar Apache, obtengo el siguiente mensaje:
     
     
      
       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">
     
      Cuando ejecuto la configuraci&oacute;n, dice que no puede encontrar
      los archivos o librer&iacute;as para GD, gdbm, o alg&uacute;n otro paquete!
     
    </a></li><li><a href="#faq.build.yytname">
     
      Cuando se esta compilando el archivo language-parser.tab.c, da errores
      as&iacute; yytname undeclared.
     
    </a></li><li><a href="#faq.build.link">
     
      Cuando ejecuto make, parece que se ejecuta bien, pero luego falla
      cuando intenta enlazar la aplicaci&oacute;n final quejandose de que faltan algunos archivos.
     
    </a></li><li><a href="#faq.build.undefined">
     
      Cuando se enlaza PHP, se queja del n&uacute;mero de referencias indefenidas.
     
    </a></li><li><a href="#faq.build.not-running">
     
      He seguido todos los pasos para instalar la versi&oacute;n del m&oacute;dulo de Apache
      en Unix, y cuando mis scripts de PHP aparecen se me pregunta por guardar
      el archivo.
     
    </a></li><li><a href="#faq.build.activate-module">
     
      Dice que use: --activate-module=src/modules/php4/libphp4.a,
      pero ese archivo no existe, asi que lo cambie a
      --activate-module=src/modules/php4/libmodphp4.a y no
      funciona!? que esta pasando?
     
    </a></li><li><a href="#faq.build.ansi">
     
      Cuando intento compilar Apache con PHP como un m&oacute;dulo estatico
      usando --activate-module=src/modules/php4/libphp4.a
      me dice que mi compilador no es compatible con ANSI.
     
    </a></li><li><a href="#faq.build.apxs">
     
      Cuando intento compilar PHP usando --with-apxs  obtengo mensajes de error extra&ntilde;os.
     
    </a></li><li><a href="#faq.build.microtime">
     
      Durante el make, obtengo errores sobre microtime,
      y muchas cosas de RUSAGE_.
     
    </a></li><li><a href="#faq.build.mysql.tempnam">
     
      Cuando compilo PHP con MySQL, la configuraci&oacute;n se ejecuta bien, pero
      durante el make obtengo un error similar al siguiente:
      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;,
      &iquest;Qu&eacute; esta mal?
     
    </a></li><li><a href="#faq.build.upgrade">
     
      Si deseo actualizar mi PHP. &iquest;Donde puedo encontrar la l&iacute;nea ./configure
      que fue usada para compilar mi instalaci&oacute;n actual de PHP?
     
    </a></li><li><a href="#faq.build.gdlibs">
     
      Cuando compilo PHP con la librer&iacute;a GD, tambi&eacute;n da errores raros de compilaci&oacute;n
      o segfaults en la ejecuci&oacute;n.
     
    </a></li><li><a href="#faq.installation.needgnu">
     
      Cuando compilo PHP parece que recibo errores al azar, como si se
      colgara. Estoy usando Solaris si eso importa.
     
    </a></li></ol></div>
   <dl class="qandaentry" id="faq.build.configure">
    <dt><strong>
     
      Tengo la última versión de PHP usando el servicio anónimo Git,
      pero no hay un script de configuración.
     
    </strong></dt>
    <dd class="answer">
     <p class="para">
      Se tiene que tener el paquete autoconf de GNU instalado y así se podrá
      generar el script de configuración desde <var class="filename">configure.in</var>. Solo
      se ejecuta <strong class="command">./buildconf</strong> en el directorio de nivel superior
      después de obtener los fuentes desde el servidor Git. (También, a menos que
      se ejecute <strong class="command">configure</strong> con la opción <code class="literal">--enable-maintainer-mode</code>,
      el script de configuración no se recompilará automaticamente cuando el
      archivo <var class="filename">configure.in</var> es actualizado, así que debe de asegurarse
      que se hace manualmente cuando se note que <var class="filename">configure.in</var> haya cambiado.
      Un sintoma de esto es encontrar cosas como @VARIABLE@ en el archivo Makefile después
      de configurar o ejecutar <var class="filename">config.status</var>).
     </p>
    </dd>
   </dl>

   <dl class="qandaentry" id="faq.build.configuring">
    <dt><strong>
     
      Tengo problemas configurando PHP para que trabaje con Apache.
      Dice que no puede encontrar el <var class="filename">httpd.h</var>, pero esta justo donde
      digo que esta!
     
    </strong></dt>
    <dd class="answer">
     <p class="para">
      Se necesita decirle al script configure/setup de apache la ubicación
      del nivel superior del árbol origen. Esto significa que se debe
      especificar <strong class="option configure">--with-apache=/path/to/apache</strong>
      y <em>no</em> <strong class="option configure">--with-apache=/path/to/apache/src</strong>.
     </p>
    </dd>
   </dl>

   <dl class="qandaentry" id="faq.build.lex">
    <dt><strong>
     
      Mientras se configura PHP (<code class="literal">./configure</code>), se devuelve
      un error similar al siguiente:
     
     
      <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">
      Se debe asegurar de leer cuidadosamente las instrucciones
      <a href="install.unix.php" class="link">installation</a> y notar que se necesita flex y bison instalados
      para compilar PHP. Dependiendo de la configuración, se necesitará
      instalar bison y flex desde el paquete de origen, como un RPM
     </p>
    </dd>
   </dl>

   <dl class="qandaentry" id="faq.build.apache-sharedcore">
    <dt><strong>
     
      Cuando intento iniciar Apache, obtengo el siguiente mensaje:
     
     
      <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">
      Este error usualmente se da cuando un programa del núcleo
      de Apache se compila como una librería DS0 para uso compartido.
      Se debe reconfigurar apache, asegurándose de usar al menos una
      de los siguientes flags:
     </p>
     <p class="para">
      <div class="example-contents screen"><br />
      --enable-shared=max --enable-rule=SHARED_CORE<br />
      </div>
     </p>
     <p class="para">
      Para mas información, leer el archivo de nivel superior
      de Apache <var class="filename">INSTALL</var> o las páginas del
      manual de Apache <a href="http://httpd.apache.org/docs/current/dso.html" class="link external">&raquo;&nbsp;DSO manual</a>.
     </p>
    </dd>
   </dl>

   <dl class="qandaentry" id="faq.build.not-found">
    <dt><strong>
     
      Cuando ejecuto la configuración, dice que no puede encontrar
      los archivos o librerías para GD, gdbm, o algún otro paquete!
     
    </strong></dt>
    <dd class="answer">
     <p class="para">
      Se puede configurar el script para que busque los archivos de encabezados
      y librerías en ubicaciones no estándar para especificar flags adicionales
      para ser pasados al preprocesador y compilador C, como:
      <div class="example-contents">
<div class="cdata"><pre>
    CPPFLAGS=-I/path/to/include LDFLAGS=-L/path/to/library ./configure
</pre></div>
      </div>

      Si se esta usando una variante de csh como login shell (por qué?),
      debería de ser:
      <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>
     
      Cuando se esta compilando el archivo <var class="filename">language-parser.tab.c</var>, da errores
      así <code class="literal">yytname undeclared</code>.
     
    </strong></dt>
    <dd class="answer">
     <p class="para">
      Se debe actualizar la versión de Bison. Se puede encontrar la ultima versión
      en <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>
     
      Cuando ejecuto <strong class="command">make</strong>, parece que se ejecuta bien, pero luego falla
      cuando intenta enlazar la aplicación final quejandose de que faltan algunos archivos.
     
    </strong></dt>
    <dd class="answer">
     <p class="para">
      Algunas versiones antiguas de make no colocan correctamente las
      versiones compiladas de archivos y funciones de directorio en el
      mismo directorio. Se debe intentar ejecutar las <strong class="command">funciones cp *.o</strong> y
      entonces re-ejecutar <strong class="command">make</strong> para ver si eso ayuda.
      Si no lo hace, realmente se debería actualizar a la versión más reciente de GNU Make.
     </p>
    </dd>
   </dl>

   <dl class="qandaentry" id="faq.build.undefined">
    <dt><strong>
     
      Cuando se enlaza PHP, se queja del número de referencias indefenidas.
     
    </strong></dt>
    <dd class="answer">
     <p class="para">
      Hay que mirar la linea del enlace y asegurarse de que todas las librerías
      apropiadas han sido incluidas al final. Las mas comunes que podrían estar
      perdidas son las &#039;-ldl&#039; y librerías requeridas como soporte por
      cualquier base de datos que se haya incluido.
     </p>
     <p class="para">
      Algunas personas han reportado que han tenido que adicionar &#039;-ldl&#039;
      inmediatamente seguido por <var class="filename">libphp4.a</var> cuando
      enlazan con Apache.
     </p>
    </dd>
   </dl>

   <dl class="qandaentry" id="faq.build.not-running">
    <dt><strong>
     
      He seguido todos los pasos para instalar la versión del módulo de Apache
      en Unix, y cuando mis scripts de PHP aparecen se me pregunta por guardar
      el archivo.
     
    </strong></dt>
    <dd class="answer">
     <p class="para">
      Esto significa que el módulo de PHP no esta siendo invocado por alguna
      razón. Hay tres cosas que chequear antes de pedir ayuda:
      <ul class="itemizedlist">
       <li class="listitem">
        <span class="simpara">
         Asegurarse que el binario del httpd que se esta ejecutando es el nuevo
         binario httpd que se acaba de hacer. Para ver esto, se debe intentar
         ejecutar: <code class="literal">/path/to/binary/httpd -l</code>
        </span>
        <span class="simpara">
         Si no se ve <var class="filename">mod_php4.c</var> listado, entonces no se
         esta ejecutando el binario correcto. Hay que encontrarlo e instalar
         el binario correcto.
        </span>
       </li>
       <li class="listitem">
        <span class="simpara">
         Asegurarse de que es agregado el Mime Type correcto en uno
         de los archivos de <code class="literal">Apache .conf</code>. Debería de ser:
         <code class="literal">AddType application/x-httpd-php .php</code>
        </span>
        <span class="simpara">
         También asegurarse que esta línea AddType no esta oculta dentro de
         un bloque de &lt;Virtualhost&gt; o uno de &lt;Directory&gt; el
         cual podría evitar que se aplique en el lugar donde se prueba el
         script.
        </span>
       </li>
       <li class="listitem">
        <span class="simpara">
         Por último, el lugar por defecto de los archivos de configuración de
         Apache cambio entre Apache 1.2 y Apache 1.3. Se debería chequear que
         el archivo de configuración al cual se le agrega la línea AddType
         esta siendo leído actualmente. Se puede poner un error de sintaxis
         obvio dentro del archivo <var class="filename">httpd.conf</var> o algún otro cambio que pueda
         decir si el archivo esta siendo leído de forma correcta.
        </span>
       </li>
      </ul>
     </p>
    </dd>
   </dl>

   <dl class="qandaentry" id="faq.build.activate-module">
    <dt><strong>
     
      Dice que use: <code class="literal">--activate-module=src/modules/php4/libphp4.a</code>,
      pero ese archivo no existe, asi que lo cambie a
      <code class="literal">--activate-module=src/modules/php4/libmodphp4.a</code> y no
      funciona!? que esta pasando?
     
    </strong></dt>
    <dd class="answer">
     <p class="para">
      Hay que tener en cuenta que el archivo <var class="filename">libphp4.a</var> no se supone que exista.
      El proceso de apache sera creado!.
     </p>
    </dd>
   </dl>

   <dl class="qandaentry" id="faq.build.ansi">
    <dt><strong>
     
      Cuando intento compilar Apache con PHP como un módulo estatico
      usando <code class="literal">--activate-module=src/modules/php4/libphp4.a</code>
      me dice que mi compilador no es compatible con ANSI.
     
    </strong></dt>
    <dd class="answer">
     <p class="para">
      Este es un mensaje de error equivocado de Apache que ha sido corregido
      en las versiones mas recientes.
     </p>
    </dd>
   </dl>

   <dl class="qandaentry" id="faq.build.apxs">
    <dt><strong>
     
      Cuando intento compilar PHP usando <strong class="option configure">--with-apxs</strong>  obtengo mensajes de error extraños.
     
    </strong></dt>
    <dd class="answer">
     <p class="para">
      Hay 3 cosas que chequear aqui. Primero, por alguna razón cuando
      Apache compila el script de Perl apxs, algunas veces termina
      compilandose sin el compilador apropiado y sin los flags correspondientes.
      Hay que encontrar el script apxs (intentar con el comando <strong class="command">which apxs</strong>),
      algunas veces se encuentra en <var class="filename">/usr/local/apache/bin/apxs</var>
      o <var class="filename">/usr/sbin/apxs</var>.
      Abrirlo y revisar las líneas similares 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>

      Si esto es lo que se ve, se ha encontrado el problema. Podrían
      contener espacios u otros valores incorrectos, como &#039;q()&#039;. Hay que
      cambiar esas linas para que digan:
      <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>

      El segundo problema posible podría ser un caso único en Red Hat 6.1
      y 6.2. El script apxs de Red Hat esta malo. Hay que ver esta línea:
      <div class="example-contents">
<div class="cdata"><pre>
my $CFG_LIBEXECDIR    = &#039;modules&#039;;         # substituted via APACI install
</pre></div>
      </div>

      Si se ve como la línea anterior, hay que cambiarla por:
      <div class="example-contents">
<div class="cdata"><pre>
my $CFG_LIBEXECDIR    = &#039;/usr/lib/apache&#039;; # substituted via APACI install
</pre></div>
      </div>

       Por último, si se reconfigura/reinstala Apache, hay que agregar un <strong class="command">make clean</strong>
       al proceso después de <strong class="command">./configure</strong> y antes de <strong class="command">make</strong>.
     </p>
    </dd>
   </dl>

   <dl class="qandaentry" id="faq.build.microtime">
    <dt><strong>
     
      Durante el <strong class="command">make</strong>, obtengo errores sobre microtime,
      y muchas cosas de <code class="literal">RUSAGE_</code>.
     
    </strong></dt>
    <dd class="answer">
     <p class="para">
      Durante la parte de la instalación de <strong class="command">make</strong>,
      si se encuentran problemas que se vean similares a esto:
      <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">
      Significa que el sistema esta mal. Se necesita corregir los archivos <var class="filename">/usr/include</var>
      instalando el paquete glibc-devel que coincida con tu glibc. Esto no
      tiene nada que ver con PHP. Para comprobar esto, hay que hacer esta
      simple prueba:
     <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>

      Si esto produce errores, se sabrá que los archivos incluidos están mal.
     </p>
    </dd>
   </dl>

   <dl class="qandaentry" id="faq.build.mysql.tempnam">
    <dt><strong>
     
      Cuando compilo PHP con MySQL, la configuración se ejecuta bien, pero
      durante el <code class="literal">make</code> obtengo un error similar al siguiente:
      <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>,
      ¿Qué esta mal?
     
    </strong></dt>
    <dd class="answer">
     <p class="para">
      Primero, es importante darse cuenta que esto es un <code class="literal">
      Warning</code> y no un error fatal. Debido a que esto es
      la última salida vista durante el <code class="literal">make</code>,
      podría verse como un error fatal pero no lo es. Por supuesto,
      si se ha puesto el compilador a que pare en los Warnings,
      lo hará. También hay que tener en mente que el soporte por
      MySQL es habilitado por defecto.
     </p>
     <blockquote class="note"><p><strong class="note">Nota</strong>: 
      <p class="para">
       Como en PHP 4.3.2, se verá el siguiente texto después de
       que se complete la compilación (make):
      </p>
      <p class="para">
       <div class="example-contents screen"><br />
        Build complete.<br />
        (Es seguro hacer caso omiso de las advertencias sobre tempnam y tmpnam).<br />
       </div>
      </p>
     </p></blockquote>
    </dd>
   </dl>

   <dl class="qandaentry" id="faq.build.upgrade">
    <dt><strong>
     
      Si deseo actualizar mi PHP. ¿Donde puedo encontrar la línea <strong class="command">./configure</strong>
      que fue usada para compilar mi instalación actual de PHP?
     
    </strong></dt>
    <dd class="answer">
     <p class="para">
      Si se mira el archivo config.nice, en el árbol origen de la instalación actual
      de PHP o, si esto no esta disponible, simplemente se debe ejecutar un script con
      <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>

      Al inicio de la salida se mostrará la línea <strong class="command">./configure</strong> que fue
      usada para compilar la instalación de PHP.
     </p>
    </dd>
   </dl>

   <dl class="qandaentry" id="faq.build.gdlibs">
    <dt><strong>
     
      Cuando compilo PHP con la librería GD, también da errores raros de compilación
      o segfaults en la ejecución.
     
    </strong></dt>
    <dd class="answer">
     <p class="para">
      Hay que asegurar que la librería GD y PHP estan enlazados contra las mismas
      librerías dependientes (ej: libpng).
     </p>
    </dd>
   </dl>

   <dl class="qandaentry" id="faq.installation.needgnu">
    <dt><strong>
     
      Cuando compilo PHP parece que recibo errores al azar, como si se
      colgara. Estoy usando Solaris si eso importa.
     
    </strong></dt>
    <dd class="answer">
     <p class="para">
      Usando utilidades no-GNU mientras se compila PHP podría causar problemas.
      Hay que asegurarse de usar herramientas GNU para estar seguros que la
      compilación de PHP funcionará. Por ejemplo, en Solaris, usando el SunOS
      BSD-compatible o versiones de Solaris de <code class="literal">sed</code> no
      funcionará, pero usando las versiones GNU o Sun POSIX (xpg4) de <code class="literal">sed</code>
      hará que funcione. Enlaces: <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>, y
      <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); ?>