Esta sección reúne la mayoría de errores que ocurren en tiempo de compilación.
Tengo la última versión de PHP usando el servicio de CVS anónimo, ¡pero no hay un script configure!
Es necesario tener el paquete GNU autoconf instalado de modo que pueda generar el script configure desde configure.in. Simplemente ejecute ./buildconf en el directorio superior después de obtener las fuentes del servidor CVS. (Asimismo, a menos que corra configure con la opción --enable-maintainer-mode, el script no será re-creado automáticamente cuando el archivo configure.in sea actualizado, así que debe asegurarse de hacerlo manualmente cuando note que configure.in ha cambiado. Un síntoma de esto es encontrar cosas como @VARIABLE@ en su Makefile después de que se ejecuta configure o config.status.)
Tengo problemas configurando PHP para que funcione con Apache. Dice que no puede encontrar httpd.h, ¡pero está allí donde dije que estaba!
Necesita decirle al script configure/setup la ubicación del nivel superior de su árbol fuente de Apache. Esto quiere decir que debe especificar --with-apache=/ruta/hacia/apache y no --with-apache=/ruta/hacia/apache/src.
Mientras configuraba PHP (./configure), se encuentra con un error similar al siguiente:
checking lex output file root... ./configure: lex: command not found configure: error: cannot find output from lex; giving up
Asegúrese de leer las instrucciones de instalación cuidadosamente y note que necesita instalar tanto flex como bison para compilar PHP. Dependiendo de su configuración, deberá instalar bison y flex ya sea desde el código fuente, o un paquete, como un RPM.
Cuando intento iniciar Apache, recibo el siguiente mensaje:
fatal: relocation error: file /ruta/hacia/libphp4.so: symbol ap_block_alarms: referenced symbol not found
Este error aparece usualmente cuando se compila el programa núcleo de Apache como una biblioteca DSO para uso compartido. Intente reconfigurar apache, asegurándose de usar por lo menos las siguientes banderas:
--enable-shared=max --enable-rule=SHARED_CORE
Para más información, lea el archivo INSTALL en el nivel superior de Apache, o la » página del manual DSO de Apache.
Cuando ejecuto configure, ¡dice que no puede encontrar los archivos de inclusión o la biblioteca GD, gdbm o algún otro paquete!
Puede hacer que el script configura busque por archivos de cabecera y bibliotecas en ubicaciones no-estándar especificando banderas a pasar al pre-procesador y enlazador de C, como:
CPPFLAGS=-I/ruta/hacia/include LDFLAGS=-L/ruta/hacia/biblioteca ./configure
env CPPFLAGS=-I/ruta/hacia/include LDFLAGS=-L/ruta/hacia/biblioteca ./configure
Cuando está compilando el archivo language-parser.tab.c, produce errores diciendo yytname undeclared.
Necesita actualizar su versión de Bison. Puede encontrar la versión más reciente en » http://www.gnu.org/software/bison/bison.html.
Cuando ejecuto make, parece correr bien pero luego falla cuando intenta enlazar la aplicación final, quejándose de que no puede encontrar algunos archivos.
Algunas versiones antiguas de make no colocan correctamente las versiones compiladas de los archivos en el directorio de funciones en ese mismo directorio. Intente ejecutar cp *.o functions y luego re-ejecute make para ver si eso ayuda. Si lo hace, realmente debería actualizarse a una versión reciente de GNU make.
Cuando se enlaza PHP, se queja del número de referencias indefinidas.
Eche un vistazo a la línea de enlace y asegúrese de que todas las bibliotecas apropiadas están siendo incluidas al final. Algunas comunes que puede estar dejando pasar son '-ldl' y cualquier otra biblioteca requerida para el soporte de bases de datos que incluyó.
Si está enlazando con Apache 1.2.x, ¿recordó agregar la información apropiada a la línea EXTRA_LIBS del archivo de configuración y re-ejecutó el script Configure de Apache? Vea el capítulo de instalación para más información.
Algunas personas han reportado también que han tenido que agregar '-ldl' inmediatamente después de libphp4.a cuando enlazan con Apache.
No puedo lograr que compile PHP con Apache 1.3.
En realidad es sencillo. Siga los siguientes pasos cuidadosamente:
Nota: También es posible usar el nuevo script ./configure de Apache. Vea las instrucciones en el archivo README.configure que es parte de su distribución de Apache. También eche un vistazo al archivo INSTALL en la distribución de PHP.
He seguido todos los pasos para instalar la versión tipo módulo de Apache en Unix, y mis scripts PHP aparecen en mi navegador o se me pide que guarde el archivo.
Esto quiere decir que el módulo PHP no está siendo invocado por alguna razón. Tres cosas que puede verificar antes de solicitar más ayuda:
Dice que use: --activate-module=src/modules/php4/libphp4.a, pero ese archivo no existe, ¡así que lo cambié a --activate-module=src/modules/php4/libmodphp4.a y no funciona! ¿Qué está pasando?
Note que el archivo libphp4.a no se supone que exista. !El proceso de apache lo creará!
Cuando intento compilar Apache con PHP como un módulo estático usando --activate-module=src/modules/php4/libphp4.a me dice que mi compilador no es compatible con ANSI.
Este es un mensaje de error equivocado de Apache que ha sido arreglado en versiones más recientes.
Cuando intento compilar PHP usando --with-apxs obtengo mensajes de error extraños.
Hay tres cosas que pueden verificarse. Primero, por alguna razón cuando Apache compila el script Perl apxs, a veces termina compilándose sin las variables y banderas de compilación apropiadas. Encuentre su script apxs (pruebe con el comando which apxs), a veces se encuentra en /usr/local/apache/bin/apxs o /usr/sbin/apxs. Ábralo y verifique que tenga líneas similares a las siguientes:
my $CFG_CFLAGS_SHLIB = ' '; # substituted via Makefile.tmpl my $CFG_LD_SHLIB = ' '; # substituted via Makefile.tmpl my $CFG_LDFLAGS_SHLIB = ' '; # substituted via Makefile.tmpl
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
my $CFG_LIBEXECDIR = 'modules'; # substituted via APACI install
my $CFG_LIBEXECDIR = '/usr/lib/apache'; # substituted via APACI install
Durante make, recibo errores sobre microtime, y muchos sobre RUSAGE_.
Durante la porción make de la instalación, si encuentra problemas similares a esto:
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
Su sistema está dañado. Necesita arreglar sus archivos /usr/include instalando un paquete glibc-devel que coincida con su glibc. Esto no tiene nada que ver con PHP. Para probar este punto, realice la siguiente prueba:
$ cat >test.c <<X #include <sys/resource.h> X $ gcc -E test.c >/dev/null
Cuando compilo PHP con MySQL, configure corre bien, pero durante make recibo un error similar al siguiente: 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', ¿qué está fallando?
Primero, es importante entender que esta es una Advertencia y no un error fatal. Dado que ésta es con frecuencia la última salida observada durante make, puede parecer como un error fatal, pero no lo es. Por supuesto, si ha configurado su compilador para que se detenga en las Advertencias, lo hará. También tenga en cuenta que el soporte MySQL está habilitado por defecto.
Note: A partir de PHP 4.3.2, también verá el siguiente texto después de que la compilación (make) se complete:
Build complete. (It is safe to ignore warnings about tempnam and tmpnam).
Quiero actualizar mi instalación de PHP. ¿Dónde puedo encontrar la línea ./configure que fue usada para compilar mi instalación actual de PHP?
Bien puede mirar su archivo config.nice, en el árbol actual de su instalación PHP actual o, si no está disponible, simplemente ejecute un script como el siguiente
<?php phpinfo(); ?>
Cuando se compila PHP con la biblioteca GD se producen errores extraños de compilación o produce un fallo de segmentos (segfault) en la ejecución.
Asegúrese de que su biblioteca GD y PHP están enlazados contra las mismas bibliotecas de dependencia (p.ej. libpng).
Cuando se compila PHP parece que recibo errores aleatorios, como si se colgara. Estoy usando Solaris si eso tiene importancia.
Usar utilidades no-GNU durante la compilación de PHP puede causar problemas. Asegúrese de usar herramientas GNU para tener la certeza de que la compilación de PHP funcione. Por ejemplo, en Solaris, usar las versiones de SunOS compatibles-con-BSD o de Solaris de sed no funcionará, pero usar las versiones GNU o Sun POSIX (xpg4) de sed lo hará. Enlaces: » GNU sed, » GNU flex, y » GNU bison.