Errores al vincular a libreolv al compilar PHP 5.2.10 desde la fuente en OS X
-
05-07-2019 - |
Pregunta
Para empezar, normalmente optaría por usar un binario precompilado de PHP, pero debo construir desde una fuente para una necesidad comercial específica. (No soy del tipo que compila aplicaciones de código abierto solo por diversión).
Estoy desarrollando OS X 10.6 y me estoy ejecutando en el siguiente error cuando trato de make
PHP 5.2.10 como un módulo de 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 lo ha sido desde al menos 10.4). Tenga en cuenta que los archivos * .dylib
son el equivalente de Mac de los archivos * .so
en Linux, y que ya he compilado con éxito en libiconv.dylib
al pasar --with-iconv = shared, / usr
a ./configure
, que eliminó errores de enlace 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 descubrir cómo hacer que la biblioteca compartida se vincule correctamente. ¿Algún consejo para hacer que eso funcione? Nunca he hecho nada como pasar banderas de enlace personalizadas a ./configure
, y Google no me ha ayudado en este problema, por desgracia.
Editar: Estoy compilando desde esta descarga de TAR si alguien quiere intentar replicar el error en Snow Leopard.
Solución
Intente agregar -lresolv a su Makefile.
Espero que esto ayude. Recibí la sugerencia de esta discusión .
Otros consejos
Si configura la variable de entorno configure 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í.
Recomendaría resolver las dependencias utilizando fink / macports . Construya todos los componentes usando macports y luego compile php desde la fuente apuntando los directorios lib a / opt / ...
Incluso puedes compilar php directamente desde la fuente usando macports.
Para aquellos que no pueden averiguar dónde agregar -lresolv :)
Edite el Makefile, busque la línea:
EXTRA_LIBS = [...lots of libs here...]
y agregue -lresolv a esta línea como esta:
EXTRA_LIBS = -lresolv [...lots of libs here...]
Me funcionó en MacOS X 10.6 Snow Leopard mientras compilaba PHP para LiteSpeed.