Al instalar mysqlnd
extensión de PHP, y cuando configure
se ejecuta el script, encontré el error:No se puede encontrar OpenSSL
A continuación se muestra el mensaje de error completo:
[root@terra-node-01 mysqlnd]# ./configure [...] checking for X509_free in -lcrypto... yes checking for pkg-config... /bin/pkg-config configure: error: Cannot find OpenSSL's <evp.h>de OpenSSL
Solución:No se puede encontrar OpenSSL
Paso 1:Buscar evp.h
[root@terra-node-01 mysqlnd]# locate evp.h /opt/at12.0/include/openssl/evp.h /opt/at12.0/share/doc/openssl/html/man7/evp.html /usr/include/openssl/evp.h
Paso 2:Establecer la variable de entorno PHP_OPENSSL_DIR
El script de configuración necesita ayuda para saber dónde buscarlo. Veamos cómo el script de configuración intenta buscar ese archivo. Abra el archivo de configuración con la ayuda de su editor favorito y navegue hasta el bloque que se muestra a continuación:
[root@terra-node-01 mysqlnd]# vim configure [...] for i in $PHP_OPENSSL_DIR; do if test -r $i/include/openssl/evp.h; then OPENSSL_INCDIR=$i/include fi if test -r $i/$PHP_LIBDIR/libssl.a -o -r $i/$PHP_LIBDIR/libssl.$SHLIB_SUFFIX_NAME; then OPENSSL_LIBDIR=$i/$PHP_LIBDIR fi test -n "$OPENSSL_INCDIR" && test -n "$OPENSSL_LIBDIR" && break done if test -z "$OPENSSL_INCDIR"; then as_fn_error $? "Cannot find OpenSSL's <evp.h>" "$LINENO" 5 fi if test -z "$OPENSSL_LIBDIR"; then as_fn_error $? "Cannot find OpenSSL's libraries" "$LINENO" 5 fi old_CPPFLAGS=$CPPFLAGS CPPFLAGS=-I$OPENSSL_INCDIR { $as_echo "$as_me:${as_lineno-$LINENO}: checking for OpenSSL version" >&5 $as_echo_n "checking for OpenSSL version... " >&6; } [...]
Si observa el código anterior, configure utiliza variables como PHP_OPENSSL_DIR
para buscar evp.h
. Si repite el PHP_OPENSSL_DIR
variable, verás que no contiene /usr,
que es donde se encuentra el evp.h
está presente y debería estar mirando. Entonces, la solución es simplemente definir esta variable como una variable de entorno, exportarla y ejecutar configurar nuevamente.
[root@terra-node-01 mysqlnd]# PHP_OPENSSL_DIR="/usr" [root@terra-node-01 mysqlnd]# export PHP_OPENSSL_DIR [root@terra-node-01 mysqlnd]# ./configure [...] checking for X509_free in -lcrypto... yes checking for pkg-config... /bin/pkg-config configure: error: Cannot find OpenSSL's libraries
¡Vaya! no más evp.h
error pero encontré otro error:No se pueden encontrar las bibliotecas de OpenSSL. Usando la misma técnica que la anterior, busquemos la ruta para las bibliotecas OpenSSL.
Paso 3:busque la ruta de la biblioteca OpenSSL
[root@terra-node-01 mysqlnd]# locate libssl.so locate libssl.so /opt/at12.0/lib64/libssl.so /opt/at12.0/lib64/libssl.so.1.1 /opt/at12.0/lib64/power8/libssl.so /opt/at12.0/lib64/power8/libssl.so.1.1 /opt/at12.0/lib64/power9/libssl.so /opt/at12.0/lib64/power9/libssl.so.1.1 /usr/lib64/.libssl.so.1.0.2k.hmac /usr/lib64/.libssl.so.10.hmac /usr/lib64/libssl.so /usr/lib64/libssl.so.1.0.2k /usr/lib64/libssl.so.10
Paso 3:Agregue la ruta de la biblioteca OpenSSL a PHP_OPENSSL_DIR
Agregue la ruta de bibliotecas de OpenSSL /usr/lib64
a PHP_OPENSSL_DIR
variable de entorno.
[root@terra-node-01 mysqlnd]# PHP_OPENSSL_DIR="/usr /usr/lib64" [root@terra-node-01 mysqlnd]# export PHP_OPENSSL_DIR
Desafortunadamente, solo no resolvió el problema. Después de analizar el código de configuración, descubrimos que necesitamos configurar otra variable de entorno llamada PHP_LIBDIR
. Pero esta variable no se lee desde el entorno, sino por argumentos como se ve en el siguiente fragmento del código de configuración:
[root@terra-node-01 mysqlnd]# vim configure [...] # Check whether --with-libdir was given. if test "${with_libdir+set}" = set; then : withval=$with_libdir; PHP_LIBDIR=$withval
Entonces agregó un nuevo argumento --with-libdir=""
mientras ejecuta configurar
[root@terra-node-01 mysqlnd]# ./configure --with-libdir="" [...] creating libtool appending configuration tag "CXX" to libtool configure: creating ./config.status config.status: creating config.h config.status: config.h is unchanged
El script de configuración ahora se completó con éxito, continúe con make
y make install
.