在Window下编译OpenSSL需要安装perl、vs等软件,本教程将以VS2010+Activeperl为示例。
安装ActivePerl
到<a href="https://www.activestate.com/activeperl/downloads" target="_blank">官网下载</a>对应的运行版本安装即可。
下载并解压OpenSSL源码
到<a href="https://www.openssl.org/source/" target="_blank">官网下载</a>自己需要的版本,并解压到任意目录,比如 c:\openssl-src
设置VS2010编译环境
打开命令行,执行如下命令:
32位:
cd C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\binvcvars32.bat
64位:
cd C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64vcvars64.bat
其中 C:\Program Files (x86)\Microsoft Visual Studio 10.0 是我VS2010安装目录,读者需要把路径修改为本机实际路径。
进入OpenSSL源码目录
cd c:\openssl-src
配置编译文件
perl Configure debug-VC-WIN32 no-asm --prefix="c:\openssl"
其中:
debug-VC-WIN32 表示windows 32位系统,64位系统请换成 debug-VC-WIN64A
**Relase **版本去掉debug,改为VC-WIN32或者VC-WIN64A
no-asm 表示不用汇编,不设置此属性会导致编译不过
prefix 表示需要安装的目录
生成编译文件
32位:
ms\do_ms.bat
64位:
ms\do_win64a.bat
执行这一步之后,在ms目录下会生成 nt.mak 和 ntdll.mak 两个编译配置文件
nt.mak 用于生成静态lib库
ntdll.mak 用于生成动态dll库
编译
静态库
nmake -f ms\nt.maknmake -f ms\nt.mak install
动态库
nmake -f ms\ntdll.maknmake -f ms\ntdll.mak install
常见错误
Assembling: tmp32\sha1-586.asmtmp32\sha1-586.asm(1427) : error A2070: invalid instruction operandstmp32\sha1-586.asm(1571) : error A2070: invalid instruction operandsNMAKE : fatal error U1077: 'ml' : return code '0x1'Stop.
出现这个问题一般就是因为在编译配置文件的时候没有加上 no-asm 属性导致的
.\ssl\bad_dtls_test.c : error C2220: 警告被视为错误 - 没有生成“object”文件.\ssl\bad_dtls_test.c : warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止 数据丢失NMAKE : fatal error U1077: “"H:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\BIN\cl.EXE"”: 返回代码“0x2”Stop.
出现这个问题是只需要降低警告级别就可以了,打开 ntdll.mak 文件,大概在第19行附近,将 CFLAG 参数中的 /W3 改成 /W0 就可以了
cryptlib.obj : error LNK2001: 无法解析的外部符号 _OPENSSL_ia32cap_Pcryptlib.obj : error LNK2019: 无法解析的外部符号 _OPENSSL_ia32_cpuid,该符号在函数 _OPENSSL_cpuid_setup 中被引用
出现这个问题是因为之前编译的临时文件没有清理导致的,因为我之前编译的时候没有添加no-asm选项,后面加上时没有清理就直接编译了,那肯定有问题。所以重新清理下再编译即可(清理方式就是重新解压一份原来的压缩包,重新来就是了)