Apache 2.4.1未定义对`SSLv2_client_method'的引用

时间:2012-03-25 00:06:18

标签: apache2 makefile openssl apache

我之前运行的是apache 2.2.20和openssl 1.0.0e。我安装了openssl 1.0.1,然后下载了apache 2.4.1的tarball并安装了apr 1.4.6&带有--prefix=/usr/local的apr-util 1.4.1。我将apache2配置为:

sudo ./configure --prefix=/usr/local/apache2 --enable-mods-shared=all
--enable-deflate --enable-proxy --enable-proxy-balancer --enable-proxy-http
--enable-rewrite --enable-cache --enable-mem-cache --enable-ssl --enable-headers
--with-mpm=worker --with-included-apr

但在运行sudo make后我收到错误:

httpd-2.4.1/support/ab.c:2227: undefined reference to `SSLv2_client_method'

导致此错误的原因是什么?如何更正?

4 个答案:

答案 0 :(得分:6)

你可能已经建立了禁用SSLv2的openssl,一些发行版已被禁用(Debian,从7.0开始--Wheezy-是一个)。查看源代码,看起来如果定义 OPENSSL_NO_SSL2 预处理程序标志,apache将不会调用SSLv2_client_method()函数。

答案 1 :(得分:3)

您还可以下载openssl的tarbal并使用

编译openssl

./config shared no-ssl2

这将设置Jon Lin提到的标志OPENSSL_NO_SSL2。

答案 2 :(得分:2)

它与OpenSSL编译无关。 PHP是造成错误的罪魁祸首。

(注意:这是OpenSSL的另一个问题,可能会阻止你生成openssl.so和opencrypto.so共享库)

以下是它是如何发生的概述。 PHP编译它的编译,当给出“make install”时,它将libphp * .so复制到/ usr / local / apache2 / modules。

此错误的源代码是 /usr/local/php-5.5.3/ext/openssl

中的openssl.c

所以简单的解决方案是在顶级Makefile中处理它。通过增加 CPPFLAGS = -D_REENTRANT -DTHREAD = 1 -DOPENSSL_NO_SSL2

进行上述更改 AFTER 运行配置脚本。希望这会有所帮助:)

答案 3 :(得分:1)

尝试使用其他Apache版本。使用Apache 2.2.15时出现错误但是当我更改为Apache 2.2.27时,“对SSLv2_client_method 的引用”错误消失了

编译行是:

./configure --with-ssl --enable-ssl

就是这样。