GNU/Linux >> Znalost Linux >  >> Linux

Chyba Nelze najít OpenSSL [PHP Extension mysqlnd]

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 .


Linux
  1. Opravit chybu ZipArchiv třídy nenalezen [PHP 7]

  2. Jak opravit chybu konfigurace:nelze najít adresář maker ‚m4‘ [Vyřešeno]

  3. Chyba při načítání sdílených knihoven libcrypto.so.1.1 – OpenSSL [Oprava]

  1. Nelze najít platnou základní adresu URL:Chyba YumRepo [Vyřešeno]

  2. Nelze najít pspell – Opravit chybu konfigurace PHP

  3. Nelze najít chybu knihovny libcrypto

  1. Chyba kompilace Openssl

  2. Openssl:chyba certifikátu s vlastním podpisem v řetězci certifikátů

  3. CHYBA:ld.so:objekt LD_PRELOAD nelze předem načíst:ignorováno