Durante l'installazione di mysqlnd
estensione PHP e quando configure
lo script è stato eseguito, ho riscontrato l'errore – Impossibile trovare OpenSSL
Di seguito è riportato il messaggio di errore 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>di OpenSSL
Soluzione:impossibile trovare OpenSSL
Step1:cerca 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
Fase 2:imposta la variabile di ambiente PHP_OPENSSL_DIR
Lo script di configurazione ha bisogno di aiuto per capire dove cercarlo. Vediamo come configure script tenta di cercare quel file. Apri il file di configurazione con l'aiuto del tuo editor preferito e vai al blocco mostrato di seguito:
[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; } [...]
Se osservi il codice sopra, configure utilizza variabili come PHP_OPENSSL_DIR
per cercare evp.h
. Se fai eco al PHP_OPENSSL_DIR
variabile, vedrai che non contiene /usr,
che è dove il evp.h
è presente e dovrebbe essere guardato. Quindi la soluzione è semplicemente definire questa variabile come variabile di ambiente, esportarla ed eseguire nuovamente configure.
[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
Oh! non più evp.h
errore ma riscontrato un altro errore:Impossibile trovare le librerie di OpenSSL. Usando la stessa tecnica di cui sopra, scopriamo il percorso per le librerie OpenSSL.
Fase 3:trova il percorso della libreria 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
Fase 3:aggiungi il percorso della libreria OpenSSL a PHP_OPENSSL_DIR
Aggiungi il percorso delle librerie OpenSSL /usr/lib64
a PHP_OPENSSL_DIR
variabile di ambiente.
[root@terra-node-01 mysqlnd]# PHP_OPENSSL_DIR="/usr /usr/lib64" [root@terra-node-01 mysqlnd]# export PHP_OPENSSL_DIR
Sfortunatamente, da solo non ha risolto il problema. Dopo aver analizzato il codice di configurazione, abbiamo scoperto che è necessario impostare un'altra variabile di ambiente chiamata PHP_LIBDIR
. Ma questa variabile non viene letta dall'ambiente, ma da argomenti come si vede dal frammento di codice di configurazione seguente:
[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
Quindi aggiunto un nuovo argomento --with-libdir=""
durante l'esecuzione di configure
[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
Lo script di configurazione è ora completato con successo, vai avanti con il make
e make install
.