Während der Installation von mysqlnd
PHP-Erweiterung und wenn die configure
Skript ausgeführt wird, ist der Fehler aufgetreten – Cannot find OpenSSL
Unten ist die vollständige Fehlermeldung:
[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>von OpenSSL
Lösung:Kann OpenSSL
nicht finden Schritt1:Suchen Sie nach 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
Schritt 2:Umgebungsvariable PHP_OPENSSL_DIR festlegen
Das configure-Skript braucht Hilfe, um herauszufinden, wo es danach suchen muss. Sehen wir uns an, wie das Konfigurationsskript versucht, nach dieser Datei zu suchen. Öffnen Sie die Konfigurationsdatei mit Hilfe Ihres bevorzugten Editors und navigieren Sie zu dem unten gezeigten Block:
[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; } [...]
Wenn Sie den obigen Code beobachten, verwendet configure Variablen wie PHP_OPENSSL_DIR
um nach evp.h
zu suchen . Wenn Sie PHP_OPENSSL_DIR
wiederholen -Variable sehen Sie, dass sie /usr,
nicht enthält wo sich die evp.h
befindet ist vorhanden und sollte angeschaut werden. Die Lösung besteht also darin, diese Variable einfach als Umgebungsvariable zu definieren, sie zu exportieren und configure erneut auszuführen.
[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! kein evp.h
mehr Fehler, ist aber auf einen anderen Fehler gestoßen:Kann OpenSSL-Bibliotheken nicht finden. Lassen Sie uns mit der gleichen Technik wie oben den Pfad für OpenSSL-Bibliotheken herausfinden.
Schritt 3:Pfad der OpenSSL-Bibliothek finden
[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
Schritt 3:Fügen Sie den Pfad der OpenSSL-Bibliothek zu PHP_OPENSSL_DIR hinzu
Fügen Sie den OpenSSL-Bibliothekspfad /usr/lib64
hinzu nach PHP_OPENSSL_DIR
Umgebungsvariable.
[root@terra-node-01 mysqlnd]# PHP_OPENSSL_DIR="/usr /usr/lib64" [root@terra-node-01 mysqlnd]# export PHP_OPENSSL_DIR
Leider hat es alleine das Problem nicht gelöst. Nach der Analyse des Konfigurationscodes haben wir festgestellt, dass wir eine weitere Umgebungsvariable namens PHP_LIBDIR
setzen müssen . Aber diese Variable wird nicht aus der Umgebung gelesen, sondern durch Argumente, wie aus dem folgenden Snippet des Konfigurationscodes ersichtlich ist:
[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
Also ein neues Argument --with-libdir=""
hinzugefügt beim Ausführen von 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
Das Konfigurationsskript ist nun erfolgreich abgeschlossen, fahren Sie mit dem make
fort und make install
.