Při instalaci mysqlnd
rozšíření PHP a při configure
skript je spuštěn, došlo k chybě – Nelze najít OpenSSL
Níže je úplná chybová zpráva:
[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>OpenSSL
Řešení:Nelze najít OpenSSL
Krok 1:Vyhledejte 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
Krok 2:Nastavení proměnné prostředí PHP_OPENSSL_DIR
Konfigurační skript potřebuje pomoc s určením, kde jej hledat. Podívejme se, jak se konfigurační skript snaží tento soubor vyhledat. Otevřete konfigurační soubor pomocí svého oblíbeného editoru a přejděte na blok zobrazený níže:
[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; } [...]
Pokud dodržíte výše uvedený kód, konfigurace používá proměnné, jako je PHP_OPENSSL_DIR
pro vyhledání evp.h
. Pokud opakujete PHP_OPENSSL_DIR
proměnnou, uvidíte, že neobsahuje /usr,
což je místo evp.h
je přítomen a měl by se na něj dívat. Řešením je tedy jednoduše definovat tuto proměnnou jako proměnnou prostředí, exportovat ji a znovu spustit konfiguraci.
[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
Ach! už žádné evp.h
došlo k chybě, ale došlo k jiné chybě:Nelze najít knihovny OpenSSL. Pomocí stejné techniky jako výše zjistíme cestu ke knihovnám OpenSSL.
Krok 3:Najděte cestu ke knihovně 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
Krok 3:Přidejte cestu ke knihovně OpenSSL do PHP_OPENSSL_DIR
Přidejte cestu OpenSSL libs /usr/lib64
do PHP_OPENSSL_DIR
proměnná prostředí.
[root@terra-node-01 mysqlnd]# PHP_OPENSSL_DIR="/usr /usr/lib64" [root@terra-node-01 mysqlnd]# export PHP_OPENSSL_DIR
Bohužel to samo o sobě problém nevyřešilo. Po analýze konfiguračního kódu jsme zjistili, že musíme nastavit další proměnnou prostředí s názvem PHP_LIBDIR
. Ale tato proměnná se nečte z prostředí, ale pomocí argumentů, jak je vidět z níže uvedeného fragmentu konfiguračního kódu:
[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
Takže přidán nový argument --with-libdir=""
při spuštění konfigurovat
[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
Konfigurační skript je nyní úspěšně dokončen, pokračujte pomocí make
a make install
.