Cómo resolver `configure: error: ¿No puede encontrar OpenSSL's <evp.h>`?

33

Estoy tratando de recompilar PHP, pero ./configure falla en:

configure: error: Cannot find OpenSSL's <evp.h>

Tengo instalado LibSSL 1.0.0, LibSSL 0.9.8, LibSSL-Dev, OpenSSL.

--with-openssl=/usr/include/openssl

cuando lo intento con

--with-openssl

me dice:

configure: error: no se pueden encontrar las bibliotecas de OpenSSL

¿Dónde están el problema?

PS Php es 5.2.5, OS es Ubuntu

Cappy
fuente

Respuestas:

47

El mismo problema ocurrió Ubuntu 12.04.1 LTSy se resolvió emitiendo:

sudo apt-get install libcurl4-openssl-dev pkg-config

antila
fuente
Hola :) Olvidé cómo resuelvo mi problema. :) Fue hace medio año.
CappY
2
¿Cómo es libcurl4-openssl-devdiferente de libssl-dev?
Gherman
16

Para compilar php-5.3 en Debian wheezy necesita lo siguiente para corregir este error.

apt-get install libssl-dev libsslcommon2-dev

Luego debe configurar con lo siguiente incluido

./configure --with-libdir=/lib/x86_64-linux-gnu ...
JinnKo
fuente
2
1+, me ayudó mucho. También tuve que agregar --with-php-config /usr/local/src/php-x.x.x/scripts/php_config. He escrito un PHP para compilar con extensiones.
Daniel W.
funciona pero falla todos los casos de prueba.
Rafael
Funciona para la compilación manual PHP5.2 en Ubuntu 14.04 con la directiva "--with-openssl". muchas gracias.
Dr I
12

Suponiendo que ya tiene las bibliotecas OpenSSL y los archivos de encabezado (en sistemas rpm, estos últimos están en el paquete xxxx-devel) ...

El problema parece surgir de cómo configureresuelve las dependencias que se distribuyen alrededor del sistema de archivos. Para compilar el código, el comiler necesita saber dónde están los encabezados. Para vincular el código, el vinculador necesita saber dónde están las bibliotecas.

[colin@host]$ configure .... --with-openssl-dir=/usr/include/openssl ....
...
checking OpenSSL dir for FTP... /usr/include/openssl
checking for pkg-config... /usr/bin/pkg-config
configure: error: Cannot find OpenSSL's <evp.h>

[colin@host]$ find /usr/include -name evp.h
/usr/include/openssl/evp.h

El directorio de inclusión tiene el archivo de inclusión, pero pkg-config falla porque la biblioteca no está en / usr / include / openssl, está en / usr / lib

Ejecutando configure nuevamente con / usr como el directorio:

configure .... --with-openssl-dir=/usr ....
...
checking OpenSSL dir for FTP... /usr
checking for pkg-config... /usr/bin/pkg-config
checking for OpenSSL version... >= 0.9.6
checking for CRYPTO_free in -lcrypto... yes
...

Se busca la ruta pasada como argumento para encontrar los recursos relevantes.

symcbean
fuente
Esto funcionó para mí. Esta es una buena solución.
Shawn Welch
¡Esta fue la solución en debian wheezy + php 5.3.10! ¡¡¡¡Gracias!!!!
holms
@holms: esa es ahora una versión bastante antigua de php. Particularmente si va a usar paquetes compilados desde la fuente en lugar de paquetes administrados, entonces debe usar una versión reciente.
symcbean
Esta fue la solución para mí la construcción php-7.1.12en Debian Jessie. Gracias
ako
10

Otra razón ./configurepodría fallar es porque no tiene pkg-configinstalado, como en mi caso con PHP7 y Debian Jessie:

sudo apt-get install pkg-config
Razvan Grigore
fuente
2
Eso ya se señaló en una respuesta diferente a la de hace tres años.
kasperd el
9

Para compilar php-5.4.45 en Debian 8.1 (Jessie) tuve que:

apt-get install libssl-dev

Después de eso podría compilarlo simplemente usando --with-openssl

Steven
fuente
2

Solucioné el problema instalando bibliotecas adicionales

sudo apt-get install -y autoconf g++ make openssl libssl-dev libcurl4-openssl-dev
sudo apt-get install -y libcurl4-openssl-dev pkg-config
sudo apt-get install -y libsasl2-dev
Toir427
fuente
1

En centos7 Instalar openssl-devel yum install openssl-devel

Uriel Acosta Hernández
fuente
0

Debe ayudar a configurar la búsqueda de dónde buscar el archivo evp.h, porque de forma predeterminada buscará directorios y agregará sufijos codificados para encontrarlo. He guardado los detalles en mi página wiki para aquellos que quieran entender la solución. Esto es lo que funcionó para mí:

root@audio-mon[10.10.10.82] ~/DOWNLOADS/php-5.5.23/ext/mysqlnd # PHP_OPENSSL_DIR="/usr /usr/lib/x86_64-linux-gnu"
root@audio-mon[10.10.10.82] ~/DOWNLOADS/php-5.5.23/ext/mysqlnd # ./configure --with-libdir=""
[...]
checking for DSA_get_default_method in -lssl... yes
checking for X509_free in -lcrypto... yes
checking for pkg-config... /usr/bin/pkg-config
checking for OpenSSL version... >= 0.9.6 #                     <------------------------------------- YES !
[...]
config.status: creating config.h
config.status: config.h is unchanged
root@audio-mon[10.10.10.82] ~/DOWNLOADS/php-5.5.23/ext/mysqlnd # 

YMMV (las rutas son diferentes). Si eso no funcionó para ti, revisa la página wiki , te ayudará a descubrir qué caminos poner.

ychaouche
fuente
0

Tuve el mismo problema en Fedora 19 a pesar de tener instalado OpenSSL.

Tuve que instalar openssl-devel.i686 que encontré al hacer una búsqueda genérica de todos los paquetes relacionados con ssl:

sudo yum search ssl
sudo yum install openssl-devel.i686

Luego ejecuté configure nuevamente con éxito:

sudo ./configure --with-apxs2=/usr/bin/apxs --with-mysql --enable-mbstring --with-mysqli --with-openssl=/usr/
Antonio
fuente
0

Solo mi comentario: después de resolver este problema de SSL de esta publicación, me he dado por vencido en compilar php 5.3 porque falló aún más en las extensiones zend dom en el medio, encontré algunos parches y decidí dejar este alboroto . Hay ubuntu 12.04 que todavía tiene 5.3.10 php a bordo. Tenga cuidado php-fpm en ese entonces borrando las variables de entorno. Por lo tanto, no se sorprenda cuando no pueda pasar variables globales de Docker, por ejemplo.

holms
fuente