我之前运行的是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'
导致此错误的原因是什么?如何更正?
答案 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
就是这样。