2009-07-30 11 views
5

Para empezar, normalmente optaría por usar un binario precompilado de PHP, pero estoy obligado a compilar desde la fuente para una necesidad comercial específica. (No soy el tipo que compila aplicaciones de código abierto solo para patadas).Errores al vincular libresolv al construir PHP 5.2.10 desde la fuente en OS X

Estoy construyendo sobre OS X 10.6 y me encuentro con el siguiente error cuando trato de make PHP 5.2.10 como módulo Apache (--with-apxs2):

Undefined symbols: 
    "_res_9_dn_expand", referenced from: 
     _zif_dns_get_mx in dns.o 
    "_res_9_search", referenced from: 
     _zif_dns_get_mx in dns.o 
     _zif_dns_check_record in dns.o 
    "_res_9_dn_skipname", referenced from: 
     _zif_dns_get_mx in dns.o 
     _zif_dns_get_mx in dns.o 
ld: symbol(s) not found 

Estos símbolos son parte de libresolv, que se incluye en /usr/lib/libresolv.dylib en OS X (y ha sido desde al menos 10.4). Tenga en cuenta que los archivos *.dylib son los equivalentes de Mac de los archivos *.so en Linux, y que ya compilé satisfactoriamente en libiconv.dylib pasando --with-iconv=shared,/usr a , que eliminó errores de vinculador similares para la biblioteca iconv.

Cuando ejecuto ./configure, detecta /usr/include/resolv.h y lo habilita en el archivo MAKE. Sin embargo, parece que no puedo encontrar la forma de hacer que la biblioteca compartida se vincule correctamente. ¿Alguna sugerencia para que eso funcione? Nunca he hecho nada como pasar indicadores de enlazadores personalizados al ./configure, y Google no me ha ayudado por este problema, desafortunadamente.


Editar: estoy construyendo a partir this TAR download si alguien quiere tratar de replicar el error en Snow Leopard.

Respuesta

4

Prueba a agregar -lresolv a tu Makefile.

Espero que esto ayude. Recibí la sugerencia de este discussion.

+0

Esa es una buena ventaja. Acabo de ejecutar mi script de compilación en una máquina con 10.5 y está perfectamente bien, así que este es definitivamente un problema nuevo para Snow Leopard. Desafortunadamente, estoy teniendo problemas para averiguar dónde agregar '-lresolv' en el Makefile. (Sería incluso mejor si puedo hacer algo como establecer una variable de entorno y tener './ configure' agréguelo para mí.) MacPorts usa su propio formato de archivo de puerto, por lo que no es muy útil para detalles, desafortunadamente ... –

+1

Lo descubrí. Añadí ** if ['uname -r' ==" 10.0.0 "]; luego exporta EXTRA_LDFLAGS = -lresolv; fi ** antes de llamar a './configure' con las otras opciones, y agregó con éxito -lolvida al Makefile. Estoy aceptando esta respuesta ya que me indicó la dirección correcta. ¡Gracias! –

+0

Debo señalar que desde que acepté esta respuesta, actualicé mi código para tomar la versión principal del kernel (10 en este caso) usando 'uname -r | corte -d. -f 1' en su lugar. Esto es importante porque aunque OS X 10.6.0 tiene kernel versión 10.0.0, OS X 10.6.2 tiene la versión 10.2.0, y así sucesivamente. Ahora guardo este valor en '$ KERNEL_MAJOR' y uso' if [$ KERNEL_MAJOR -ge 10]; luego ... fi' para verificar 10.6 o más. –

2

Recomendaría resolver las dependencias usando fink/macports. Construya todos los componentes usando macports y luego compile php desde la fuente que apunta los directorios lib a/opt/...

Incluso puede compilar php directamente desde la fuente usando macports.

+0

Desafortunadamente, esto no es factible, ya que los binarios compilados deben estar en una ubicación personalizada muy específica (es decir, no en '/ opt') y tienen dependencias mínimas. En general, una buena sugerencia. –

2

Para aquellos que no pueden averiguar dónde agregar -lresolv :)

Editar el Makefile, encuentra la línea:

EXTRA_LIBS = [...lots of libs here...] 

y añadir -lresolv a esta línea como la siguiente:

EXTRA_LIBS = -lresolv [...lots of libs here...] 

Funcionó para mí en MacOS X 10.6 Snow Leopard mientras compilaba PHP para LiteSpeed.

+0

Sí, eso también funcionaría. Agregué un comentario a la respuesta aceptada arriba que agregará esta bandera donde sea necesario antes de que se ejecute ./configure, y solo en Snow Leopard. Un poco más fácil (y más automatizable) que ajustar las manos. –

3

Si configura la variable de entorno de configuración antes de ejecutar el script de configuración, no tiene que editar el archivo MAKE. Por ejemplo:

LIBS=-lresolv ./configure --with-apxs2 --with-gd (etc.) 

Esta solución funcionó para mí.

Cuestiones relacionadas