首页 > 代码库 > windows下vc6.0下的OpeSSL编译过程中的问题

windows下vc6.0下的OpeSSL编译过程中的问题

 我的机器环境是: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
编译后没有问题。

 

 

 

 

 

windows下vc6.0下的OpeSSL编译过程中的问题