我的机器环境是:window7 + vs2010 + vc6.0;
其实,在windows上用VS2010以上的工具来编译Openssl源码库很简单,估计大家都测试过,用VS2008及其以上的工具编译Openssl源码库就3行代码即可:
perl Configure -WIN32 --prefix=d:/openssl
ms\do_ms
nmake -f ms\nt.mak
vc6.0版本的openssl编译步骤如下:
1、打开命令提示符,找到vc6.0所在的bin目录,输入VCVARS32.BAT,配置环境变量。
2、到openssl所在目录,执行
perl Configure VC-WIN32 --prefix=d:/openssl,如果想编译debug版本,则将VC-WIN32换成debug-VC-WIN32。
3、执行ms\do_ms;
4、执行nmake -f ms\nt.mak;
出现了上述问题,这个问题出现的原因是ml.exe是微软的汇编编译器,由于vc6.0没有装汇编程序,所以会出现这个问题。解决方案是,
从vs2010的安装程序中拷贝一个ml.exe到D:\Program Files\Microsoft Visual Studio\VC98\Bin目录下。继续编译:
紧接着就出现了
上面的问题,在网上查询了资料,说的是windows7装的SDK的版本过高,因此一些调试信息支持不了;我想得是,调试信息支持不了,
大不了我用release版本,因此,我在执行完ms\do_ms后,修改ms目录下的nt.mak中的
LFLAGS=/nologo /subsystem:console /opt:ref /debug 这行改为
LFLAGS=/nologo /subsystem:console /opt:ref /release
同样地,ntdll.mak里面也这样修改。这样有一个弊病,就是vc6.0的debug下始终报错。
后面继续查找了部分资料,以及结合上面出现的问题,我就想不用汇编语言,于是,从头开始编译,让openssl排除掉汇编语言,就是在编译openssl时,加入-no-asm。
perl Configure VC-WIN32 -no-asm --prefix=d:/openssl
ms\do_ms
nmake -f ms\nt.mak
这个问题产生的原因是vc6.0中没有添加IPV6这个编译选项。
解决方案:
在执行的时候禁用IPV6,即
perl Configure -DOPENSSL_USE_IPV6=0
于是从开始开编译:
perl Configure VC-WIN32 -DOPENSSL_USE_IPV6=0 -no-asm --prefix=d:/openssl
ms\do_mss
nmake -f ms\nt.mak
编译后没有问题。