Lors de l'installation de mysqlnd
PHP, et quand le configure
script est exécuté, j'ai rencontré l'erreur – Impossible de trouver OpenSSL
Ci-dessous le message d'erreur complet :
[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>d'OpenSSL
Solution :Impossible de trouver OpenSSL
Étape 1 :Rechercher 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
Étape 2 :Définir la variable d'environnement PHP_OPENSSL_DIR
Le script de configuration a besoin d'aide pour savoir où le chercher. Voyons comment le script de configuration essaie de rechercher ce fichier. Ouvrez le fichier de configuration à l'aide de votre éditeur préféré et accédez au bloc ci-dessous :
[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 vous observez le code ci-dessus, configurez utilise des variables telles que PHP_OPENSSL_DIR
pour rechercher evp.h
. Si vous faites écho au PHP_OPENSSL_DIR
variable, vous verrez qu'elle ne contient pas /usr,
où se trouve le evp.h
est présent et il devrait être regardé. La solution consiste donc simplement à définir cette variable en tant que variable d'environnement, à l'exporter et à relancer la configuration.
[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! plus de evp.h
erreur mais a rencontré une autre erreur :Impossible de trouver les bibliothèques d'OpenSSL. En utilisant la même technique que ci-dessus, découvrons le chemin des bibliothèques OpenSSL.
Étape 3 :Trouver le chemin de la bibliothèque 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
Étape 3 :Ajoutez le chemin de la bibliothèque OpenSSL à PHP_OPENSSL_DIR
Ajoutez le chemin des bibliothèques OpenSSL /usr/lib64
vers PHP_OPENSSL_DIR
variable d'environnement.
[root@terra-node-01 mysqlnd]# PHP_OPENSSL_DIR="/usr /usr/lib64" [root@terra-node-01 mysqlnd]# export PHP_OPENSSL_DIR
Malheureusement, cela seul n'a pas résolu le problème. Après avoir analysé le code de configuration, nous avons constaté que nous devions définir une autre variable d'environnement appelée PHP_LIBDIR
. Mais cette variable n'est pas lue à partir de l'environnement, mais par des arguments comme le montre l'extrait ci-dessous du code de configuration :
[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
Donc ajouté un nouvel argument --with-libdir=""
lors de l'exécution de 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
Le script de configuration est maintenant terminé avec succès, continuez avec le make
et make install
.