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 .