Jak rozwiązać `config: error: Nie możesz znaleźć OpenSSL <evp.h>`?

33

Próbuję ponownie skompilować PHP, ale ./configure kończy się niepowodzeniem pod adresem:

configure: error: Cannot find OpenSSL's <evp.h>

Mam zainstalowane LibSSL 1.0.0, LibSSL 0.9.8, LibSSL-Dev, OpenSSL.

--with-openssl=/usr/include/openssl

kiedy próbuję z

--with-openssl

mówi mi:

configure: error: Nie można znaleźć bibliotek OpenSSL

Gdzie **** są problemem?

PS Php to 5.2.5, system operacyjny to Ubuntu

CappY
źródło

Odpowiedzi:

47

Ten sam problem wystąpił w dniu Ubuntu 12.04.1 LTSi został rozwiązany przez wydanie:

sudo apt-get install libcurl4-openssl-dev pkg-config

antila
źródło
Witam :) Zapomniałem, jak rozwiązać problem. :) To było pół roku temu.
CappY
2
Czym się libcurl4-openssl-devróżni libssl-dev?
Gherman
16

Aby zbudować php-5.3 na wheezy Debiana, potrzebujesz następujących rzeczy, aby naprawić ten błąd.

apt-get install libssl-dev libsslcommon2-dev

Następnie musisz skonfigurować przy użyciu następujących elementów

./configure --with-libdir=/lib/x86_64-linux-gnu ...
JinnKo
źródło
2
1+, bardzo mi pomogło. Musiałem także dodać --with-php-config /usr/local/src/php-x.x.x/scripts/php_config. Napisałem jak skompilować PHP z rozszerzeniami.
Daniel W.
działa, ale zawodzi wszystkie przypadki testowe.
Rafael
Działa z kompilacją ręczną PHP5.2 na Ubuntu 14.04 z dyrektywą „--with-openssl”. wielkie dzięki.
Dr I
12

Zakładając, że masz już biblioteki OpenSSL i pliki nagłówkowe (w systemach rpm te ostatnie znajdują się w pakiecie xxxx-devel) ...

Problem wydaje się wynikać ze sposobu, w jaki configurerozwiązuje się zależności rozproszone wokół systemu plików. Aby skompilować kod, komiler musi wiedzieć, gdzie są nagłówki. Aby połączyć kod, linker musi wiedzieć, gdzie znajdują się biblioteki.

[colin@host]$ configure .... --with-openssl-dir=/usr/include/openssl ....
...
checking OpenSSL dir for FTP... /usr/include/openssl
checking for pkg-config... /usr/bin/pkg-config
configure: error: Cannot find OpenSSL's <evp.h>

[colin@host]$ find /usr/include -name evp.h
/usr/include/openssl/evp.h

Katalog dołączania zawiera plik dołączania, ale pkg-config kończy się niepowodzeniem, ponieważ biblioteki nie ma w / usr / include / openssl, a w / usr / lib

Ponownie uruchom konfigurację z / usr jako katalogiem:

configure .... --with-openssl-dir=/usr ....
...
checking OpenSSL dir for FTP... /usr
checking for pkg-config... /usr/bin/pkg-config
checking for OpenSSL version... >= 0.9.6
checking for CRYPTO_free in -lcrypto... yes
...

Ścieżka przekazana jako argument jest przeszukiwana w celu znalezienia odpowiednich zasobów.

symcbean
źródło
To zadziałało dla mnie. To dobre rozwiązanie.
Shawn Welch
To było rozwiązanie na debian wheezy + php 5.3.10! Dziękuję Ci!!!!
holms
@holms: jest to raczej stara wersja php. W szczególności, jeśli zamierzasz używać skompilowanych pakietów ze źródeł zamiast pakietów zarządzanych, powinieneś użyć najnowszej wersji.
symcbean
Było to rozwiązanie dla mnie budowanie php-7.1.12na Debian Jessie. Dziękuję
ako
10

Innym powodem ./configureniepowodzenia może być brak pkg-configinstalacji, jak w moim przypadku z PHP7 i Debian Jessie:

sudo apt-get install pkg-config
Razvan Grigore
źródło
2
Zostało to już wskazane w innej odpowiedzi niż trzy lata temu.
kasperd
9

Aby skompilować php-5.4.45 na Debianie 8.1 (Jessie) musiałem:

apt-get install libssl-dev

Potem mogłem go skompilować za pomocą --with-openssl

Steven
źródło
2

Rozwiązałem problem, instalując dodatkowe biblioteki

sudo apt-get install -y autoconf g++ make openssl libssl-dev libcurl4-openssl-dev
sudo apt-get install -y libcurl4-openssl-dev pkg-config
sudo apt-get install -y libsasl2-dev
Toir427
źródło
1

Na centos7 Zainstaluj openssl-devel yum install openssl-devel

Uriel Acosta Hernández
źródło
0

Musisz pomóc w ustaleniu, gdzie szukać pliku evp.h, ponieważ domyślnie skanuje katalogi i dodaje do nich przyrostki zakodowane na stałe, aby go znaleźć. Zachowałem szczegóły na mojej stronie wiki dla tych, którzy chcą zrozumieć rozwiązanie. Oto, co zadziałało dla mnie:

root@audio-mon[10.10.10.82] ~/DOWNLOADS/php-5.5.23/ext/mysqlnd # PHP_OPENSSL_DIR="/usr /usr/lib/x86_64-linux-gnu"
root@audio-mon[10.10.10.82] ~/DOWNLOADS/php-5.5.23/ext/mysqlnd # ./configure --with-libdir=""
[...]
checking for DSA_get_default_method in -lssl... yes
checking for X509_free in -lcrypto... yes
checking for pkg-config... /usr/bin/pkg-config
checking for OpenSSL version... >= 0.9.6 #                     <------------------------------------- YES !
[...]
config.status: creating config.h
config.status: config.h is unchanged
root@audio-mon[10.10.10.82] ~/DOWNLOADS/php-5.5.23/ext/mysqlnd # 

YMMV (ścieżki są różne). Jeśli to nie zadziałało, sprawdź stronę wiki , która pomoże ci znaleźć ścieżki do umieszczenia.

ychaouche
źródło
0

Miałem ten sam problem na Fedorze 19, mimo że zainstalowałem OpenSSL.

Musiałem zainstalować openssl-devel.i686, który znalazłem, przeprowadzając ogólne wyszukiwanie wszystkich pakietów związanych z ssl:

sudo yum search ssl
sudo yum install openssl-devel.i686

Następnie z sukcesem uruchomiłem konfigurację:

sudo ./configure --with-apxs2=/usr/bin/apxs --with-mysql --enable-mbstring --with-mysqli --with-openssl=/usr/
Anthony
źródło
0

Tylko moja opinia: po rozwiązaniu problemu z ssl z postu thsi, całkowicie zrezygnowałem z kompilacji php 5.3, ponieważ nie udało mi się to później w rozszerzeniach zend dom w środku, znalazłem kilka łatek i postanowiłem porzucić to zamieszanie . Jest Ubuntu 12.04, które wciąż ma na pokładzie 5.3.10 php. Uważaj wtedy na php-fpm, usuwając zmienne środowiskowe. Nie zdziw się więc, gdy nie możesz na przykład przekazać zmiennych globalnych z okna dokowanego.

holms
źródło