无法让 Apache 2.2.21 使用 OpenSSL 支持进行编译

无法让 Apache 2.2.21 使用 OpenSSL 支持进行编译

好吧——这几天在 CentOS 5.7 上使用以下配置命令编译 Apache 2.2.21 时遇到了麻烦:

./configure --enable-ssl=shared --with-ssl=/usr/local/openssl

我从源代码编译了 OpenSSL 1.0.0e:

./config --prefix=/usr/local --openssldir=/usr/local/openssl shared zlib-dynamic

我尝试启动 Apache 并返回:

httpd: Syntax error on line 54 of /usr/local/apache2/conf/httpd.conf: Cannot load /usr/local/apache2/modules/mod_ssl.so into server: /usr/local/apache2/modules/mod_ssl.so: undefined symbol: SSL_get_servername

如果我查看库是如何链接的,我就会得到以下结果:

[root@web1 modules]# ldd mod_ssl.so libssl.so.6 => /lib64/libssl.so.6 (0x00002aaaaace4000) libcrypto.so.6 => /lib64/libcrypto.so.6 (0x00002aaaaaf30000) libdl.so.2 => /lib64/libdl.so.2 (0x00002aaaab281000) libz.so.1 => /lib64/libz.so.1 (0x00002aaaab486000) libpthread.so.0 => /lib64/libpthread.so.0 (0x00002aaaab69a000) libc.so.6 => /lib64/libc.so.6 (0x00002aaaab8b5000) libgssapi_krb5.so.2 => /usr/lib64/libgssapi_krb5.so.2 (0x00002aaaabc0e000) libkrb5.so.3 => /usr/lib64/libkrb5.so.3 (0x00002aaaabe3c000) libcom_err.so.2 => /lib64/libcom_err.so.2 (0x00002aaaac0d1000) libk5crypto.so.3 => /usr/lib64/libk5crypto.so.3 (0x00002aaaac2d4000) /lib64/ld-linux-x86-64.so.2 (0x0000555555554000) libkrb5support.so.0 => /usr/lib64/libkrb5support.so.0 (0x00002aaaac4f9000) libkeyutils.so.1 => /lib64/libkeyutils.so.1 (0x00002aaaac702000) libresolv.so.2 => /lib64/libresolv.so.2 (0x00002aaaac904000) libselinux.so.1 => /lib64/libselinux.so.1 (0x00002aaaacb19000) libsepol.so.1 => /lib64/libsepol.so.1 (0x00002aaaacd32000)

基本上,我已经厌倦了从源 OpenSSL(0.9.8r 和 1e)进行编译,从存储库重新安装 yum,make clean多次完成并重新制作 OpenSSL 和 Apache - 但我无法将其编译到 apache 基础中或动态地作为共享对象文件。

我在这里做错了什么?

更新 1:

执行make clean和之后make distclean,我使用与上面相同的参数重新配置,但没有任何效果。

config.log 位于粘贴箱

更新 2:

修改 LD_LIBRARY_PATH 对 mod_ssl.so 的 lib-deps 没有影响。

更新 3:

我已经编译并重新编译了很多次,并验证了ldconfigOpenSSL libs 目录是否在我的路径中,并包含在 ld.so.conf 中。仍然无法让 httpd/mod_ssl 在运行时加载库。

答案1

编译 Apache 时,应该有“--enable-so”。我认为你一定有,因为 so 模块正在尝试加载。

另外,编译 openssl 后,确保系统可以使用“/sbin/ldconfig -v /usr/local/openssl/lib”找到共享库

我还想编辑 /etc/ld.so.conf.d/local.conf 以添加一行 /usr/local/openssl/lib

答案2

我记得 openssl 默认不创建共享库。我这样做:

./配置 --prefix=/usr/local/openssl linux-elf 共享

然后你仍然需要像上面一样执行 ldconfig。并告诉 apache 在哪里找到 ssl 库。

答案3

几分钟后又遇到了同样的问题,因此我补充一下:

LDFLAGS=-L/usr/local/ssl/lib

并将 ./configure (Apache) 的参数修改为:

--with-ssl=/usr/local/ssl

--with-ssl=/usr/local/ssl/lib

不,没关系。

答案4

正如前面指出的那样,它肯定链接到了错误的 OpenSSL 安装。您应该在 ld.so.conf 中有 /usr/local/ssl/lib,但请尝试使用以下 Apache configure 命令:

LDFLAGS=-L/usr/local/ssl/lib \
./configure \
--enable-ssl \
--enable-mods-shared=all \
--with-ssl=/usr/local/ssl

另外,您确定 OpenSSL 本身按预期进行编译吗?它是否无法自行创建共享库并恢复为静态但仍然成功编译?

相关内容