Saat menginstal mysqlnd
ekstensi PHP, dan ketika configure
skrip dijalankan, saya menemukan kesalahan – Tidak dapat menemukan OpenSSL
Di bawah ini adalah pesan kesalahan lengkapnya:
[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>Open OpenSSL
Solusi:Tidak dapat menemukan OpenSSL
Langkah1:Telusuri 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
Langkah 2:Setel variabel lingkungan PHP_OPENSSL_DIR
Skrip konfigurasi memerlukan bantuan untuk mencari tahu di mana mencarinya. Mari kita lihat bagaimana skrip konfigurasi mencoba mencari file tersebut. Buka file konfigurasi dengan bantuan editor favorit Anda dan arahkan ke blok yang ditunjukkan di bawah ini:
[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; } [...]
Jika Anda mengamati kode di atas, konfigurasikan menggunakan variabel seperti PHP_OPENSSL_DIR
untuk mencari evp.h
. Jika Anda menggemakan PHP_OPENSSL_DIR
variabel, Anda akan melihat bahwa itu tidak mengandung /usr,
dimana evp.h
hadir dan harus dilihat. Jadi solusinya adalah dengan mendefinisikan variabel ini sebagai variabel lingkungan, mengekspornya, dan menjalankan konfigurasi lagi.
[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! tidak ada lagi evp.h
kesalahan tetapi menemukan kesalahan lain:Tidak dapat menemukan perpustakaan OpenSSL. Dengan menggunakan teknik yang sama seperti di atas, mari cari tahu jalur untuk library OpenSSL.
Langkah 3:Temukan jalur perpustakaan 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
Langkah 3:Tambahkan jalur perpustakaan OpenSSL ke PHP_OPENSSL_DIR
Tambahkan jalur lib OpenSSL /usr/lib64
ke PHP_OPENSSL_DIR
variabel lingkungan.
[root@terra-node-01 mysqlnd]# PHP_OPENSSL_DIR="/usr /usr/lib64" [root@terra-node-01 mysqlnd]# export PHP_OPENSSL_DIR
Sayangnya, itu saja tidak menyelesaikan masalah. Setelah menganalisis kode konfigurasi, ternyata kita perlu mengatur variabel lingkungan lain yang disebut PHP_LIBDIR
. Tetapi variabel ini tidak dibaca dari lingkungan, tetapi oleh argumen seperti yang terlihat dari cuplikan kode konfigurasi di bawah ini:
[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
Jadi tambahkan argumen baru --with-libdir=""
saat menjalankan konfigurasi
[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
Skrip konfigurasi sekarang berhasil diselesaikan, lanjutkan dengan make
dan make install
.