下载一份源码openssl-1.0.2a.tar.gz,解压,参考代码中的INSTALL.W32,步骤如下:
1、解压openssl-1.0.2a.tar
2、cd openssl-1.0.2a
3、执行perl Configure VC-WIN32,配置编译环境
4、执行ms\do_ms.bat,生成配置文件
5、执行nmake -f ms\ntdll.mak,执行编译、链接,编译结果在out32dll目录下,此命令生成动态库
出错一:
'nmake' 不是内部或外部命令,也不是可运行的程序
在vc安装目录搜索,将ide路径和nmake所在路径填到环境变量path中
本人是(仅供参考):E:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE;E:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\BIN;
出错二:
ms\uplink.c(11) : fatal error C1083: 无法打开包括文件:“windows.h”: No such file or directory
NMAKE : fatal error U1077: “"E:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\cl.EXE"”: 返回代码“0x2”
产生原因:找不到代码文件中包含的头文件
解决办法:cmd下进入到vs安装路径\VC\Bin下,执行vcvars32.bat,此时会执行vcvas32.bat自动为当前命令提示符设置VS环境变量。
以上两个环境问题,也可以使用Visual Studio tools中的命令提示符解决。
出错三:
Assembling: tmp32\sha1-586.asm
tmp32\sha1-586.asm(1427) : error A2070: invalid instruction operands
tmp32\sha1-586.asm(1571) : error A2070: invalid instruction operands
NMAKE : fatal error U1077:
'ml.EXE'
:
return
code
'0x1'
Stop.
解决办法在第3步中添加no-asm参数,即perl Configure VC-WIN32 no-asm,然后再继续执行后续步骤。
6、执行nmake -f ms\nt.mak,执行编译生成静态库,在out32下
此时如果出现如下错误:
cryptlib.obj : error LNK2001: unresolved external symbol _OPENSSL_ia32_cpuid
解决办法:
修改ms\do_ms.bat文件如下:
perl util\mk1mf.pl debug no-asm VC-WIN32 >ms\nt.mak
perl util\mk1mf.pl debug dll no-asm VC-WIN32 >ms\ntdll.mak
if x%OSVERSION% == x goto skipce
perl util\mk1mf.pl debug no-asm VC-CE >ms\ce.mak
perl util\mk1mf.pl debug dll no-asm VC-CE >ms\cedll.mak
:skipce
perl util\mkdef.pl 32 libeay > ms\libeay32.def
perl util\mkdef.pl 32 ssleay > ms\ssleay32.def
参考:http://blog.youkuaiyun.com/cuiyifang/article/details/45932817
http://blog.youkuaiyun.com/dragoo1/article/details/22398473