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.
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 ... –
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! –
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. –