如何解决“配置:错误:找不到OpenSSL的<evp.h>”?


33

我试图重新编译PHP,但是./configure在以下位置失败:

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

我安装了LibSSL 1.0.0,LibSSL 0.9.8,LibSSL-Dev,OpenSSL。

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

当我尝试

--with-openssl

告诉我:

配置:错误:找不到OpenSSL的库

问题在哪里?

PS Php是5.2.5,操作系统是Ubuntu

Answers:


47

发生了相同的问题,Ubuntu 12.04.1 LTS并通过发出以下命令解决了该问题:

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


您好:)我忘记了如何解决我的问题。:)那是半年前。
CappY

2
如何libcurl4-openssl-dev不同libssl-dev
Gherman

16

要在Debian wheezy上构建php-5.3,您需要以下内容来修复此错误。

apt-get install libssl-dev libsslcommon2-dev

然后,您需要配置以下内容

./configure --with-libdir=/lib/x86_64-linux-gnu ...

2
1+,对我有很大帮助。我还必须补充--with-php-config /usr/local/src/php-x.x.x/scripts/php_config。我已经编写了如何使用扩展功能编译PHP。
Daniel W.

可行,但所有测试用例均未通过。
拉斐尔2015年

可在Ubuntu 14.04上使用“ --with-openssl”指令针对PHP5.2手动编译。非常感谢。
I博士我

12

假设您已经拥有OpenSSL库和头文件(在rpm系统上,后者在xxxx-devel包中)...

这个问题似乎是由于如何configure解决在文件系统周围分布的依赖性而引起的。要编译代码,编译器需要知道标头在哪里。要链接代码,链接器需要知道库在哪里。

[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

include目录包含include文件,但是pkg-config失败,因为该库不在 / usr / include / openssl中,而在/ usr / lib中

使用/ usr作为目录再次运行configure:

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
...

搜索作为参数传递的路径以查找相关资源。


这对我有用。这是一个很好的解决方案。
肖恩·韦尔奇

这是在debian wheezy + php 5.3.10上的解决方案!谢谢!!!!
霍尔姆斯(Marms)

@holms:现在是一个相当旧的php版本。特别是如果您要使用源代码编译而不是托管包,则应该使用最新版本。
symcbean

这是我php-7.1.12基于的解决方案Debian Jessie。谢谢
ako


9

要在debian 8.1(Jessie)上编译php-5.4.45,我必须:

apt-get install libssl-dev

之后,我可以使用 --with-openssl


2

我通过安装额外的库来解决此问题

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


0

您需要帮助配置找出evp.h文件的位置,因为默认情况下它将扫描目录并向其添加硬编码后缀以找到该文件。对于那些想了解解决方案的人,将其详细信息保留在我的Wiki页面中。这是对我有用的东西:

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(路径不同)。如果那对您不起作用,请检查Wiki页面,它将帮助您确定要放置的路径。


0

尽管已安装OpenSSL,但我在Fedora 19上遇到了相同的问题。

我必须安装openssl-devel.i686,通过对与ssl相关的所有软件包进行常规搜索找到了该文件:

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

然后我再次成功运行配置:

sudo ./configure --with-apxs2=/usr/bin/apxs --with-mysql --enable-mbstring --with-mysqli --with-openssl=/usr/

0

仅是我的反馈:解决了此帖子中的ssl问题后,我完全放弃了编译php 5.3的步骤,因为它在中间的zend dom扩展上失败了,我找到了一些补丁,并决定放弃这件事。 。还有ubuntu 12.04,其上仍然有5.3.10 php。小心php-fpm,然后清除环境变量。因此,例如当您无法从Docker传递全局变量时,请不要感到惊讶。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.