准备工作
1)下载安装编译必须的ActivePerl:
http://www.activestate.com/activeperl/downloads
安装完成后需要执行 ppm install dmake 安装 nmake
2)下载最新的openssl源码:
https://www.openssl.org/source/
本文下载的是 openssl-1.0.2m 版本,然后解压至 C 盘根目录
设置VC编译环境
以下所有操作都是在【VS2015开发人员命令提示】中进行的,
具体位置一般是【开始->所有程序->Visual Studio 2015-> Visual Studio Tools】下;
【编译 32 位 openssl 】
cd C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin vcvars32.bat
【编译 64 位 openssl 】
cd C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\amd64 vcvars64.bat
配置编译文件和类型
如果只是想编译 OpenSSL,请看下面:
1)先进入 openssl-1.0.2m 目录
cd C:\openssl-1.0.2m
2)配置输出目录和编译类型【编译32位、64位;release、debug有区别】
perl Configure [编译类型] no-asm --prefix="[输出目录]"
-- [编译类型]可以选择以下:
参数 | 含义 |
debug-VC-WIN32 | 编译32位debug版本 |
debug-VC-WIN64A | 编译64位debug版本 |
VC-WIN32 | 编译32位release版本 |
VC-WIN64A | 编译64位release版本 |
-- [输出目录]理论任何地方都可以
3)配置模式:
- 【编译32位openssl】,一般都使用 no-asm 模式:
ms\do_nasm
- 如果之前编译使用了no-asm参数,否则会在编译引用了该openssl库的工程中出现”error LNK2001和error LNK2019 无法解析的外部符号”这个错误。
- 【编译64位openssl】
ms\do_win64a.bat
- 执行这一步之后,在ms目录下会生成 nt.mak 和 ntdll.mak 两个编译配置文件
- nt.mak 用于生成静态lib库
- ntdll.mak 用于生成动态dll库
注意: 如果不是想单独拿编译好的库出来用,而是需要交叉编译,比如接着编译libcurl,则可以使用如下命令全部一次性编译32位所有版本的库: ms\32all.bat no-asm 如果想要交叉编译libcurl,还是用 libcurl\project\build-openssl.bat 更好,但不保证可以成功。 |
编译【静态库、动态库有区别】
- 【编译openssl静态链接库】
nmake -f ms\nt.mak nmake -f ms\nt.mak test nmake -f ms\nt.mak install
- 【编译openssl动态链接库】
nmake -f ms\ntdll.mak nmake -f ms\ntdll.mak test nmake -f ms\ntdll.mak install
- 执行test命令可以测试编译好的库,测试成功了就可以运行install命令,运行完之后才会在输出目录中找到输出的编译好的库和加入工程时必要的include文件。
注意事项
1)设置编译类型的时候千万别忘记 no-asm 参数,关闭汇编模式,否则会出现类似如下错误:
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' : return code '0x1'
Stop.
2)设置VC编译环境的时候,注意有32位和64位的区别。
-------------------------------------------------------------------------------------------------------------
编译实例
openssl目录:c:\openssl-1.0.2m\
编译 32 位 Release 版本的 lib 的例子:
cd C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin vcvars32.bat perl Configure VC-WIN32 no-asm --prefix="C:\openssl-1.0.2m\win32-release-lib" ms\do_nasm nmake -f ms\nt.mak nmake -f ms\nt.mak test nmake -f ms\nt.mak install
编译 64 位 Release 版本的 dll 的例子:
cd C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin vcvars32.bat perl Configure VC-WIN64A no-asm --prefix="c:\openssl-1.0.2m\win64-release-dll" ms\do_win64a.bat nmake -f ms\ntdll.mak nmake -f ms\ntdll.mak test nmake -f ms\ntdll.mak install nmake -f ms\ntdll.mak clean
至此,就可以将 c:\openssl-1.0.2m\win32-release-lib 目录复制到需要使用的地方就可以使用了。