openssl推荐编译安装,并且使用非系统默认目录,以防系统中有装二进制包,影响使用。
以下为今天在不同系统中编译时apache,php遇到的各种错:
1. libssl.a(s3_srvr.o): relocation R_X86_64_32 against `.rodata' can not be used when making a shared object; recompile with -fPIC
第一个是apache在64位系统下的错位,增加-fPIC no-gost no-shared no-zlib参数解决,参考http://www.apachelounge.com/viewtopic.php?t=4690
2. ab.c:: undefined reference to `SSLv2_client_method'
第二个是apache在使用openssl编译到系统默认目录时和自带openssl有冲突的,编译时使用非系统目录解决,为保证nginx正常使用--with-openssl=参数指定openssl源码目录
3.xp_ssl.c:333: undefined reference to `SSLv2_client_method'
第三个是PHP在debian平台的一个BUG,最早5.2时就已经有了并解决了,我用5.4发现还报错,对比文件发现是ifndef OPENSSL_NO_SSL2写成ifdef OPENSSL_NO_SSL2了,修改下编译OK,bug如下:https://bugs.php.net/patch-display.php?bug_id=54736&patch;=debian_patches_disable_SSLv2_for_openssl_1_0_0.patch&revision;=latest
发一个最终的编译命令
./config --prefix=/data/opt/ssl --openssldir=/data/opt/ssl -fPIC no-gost no-shared no-zlib make make install