首先本文参考了以下网页,感谢!
http://www.jianshu.com/p/4522f17ce2ff和
http://developer.covenanteyes.com/building-openssl-for-visual-studio/
首先要知道:
编译release版本和debug版本一般只要一个能编译通过,另一个也不会存在问题的。所以以下尽量精简文章长度,最后附有编译所需的所有命令行。
1、准备工作:
-
1)下载安装编译必须的ActivePerl:【链接: https://pan.baidu.com/s/1mfAB5SyI1aeo-VmrvuBNeQ 密码: 4uvw】
直接下载安装,进入cmd命令输入:perl -version,如果有perl版本信息输出则正常,否则需要添加环境变量:C:\Perl64\site\bin;C:\Perl64\bin;(C:\Perl64是安装目录) -
2)下载最新的openssl源码:https://www.openssl.org/source/
我这里下载的是openssl-1.0.2o.tar.gz版本。然后解压备用,放置的目录最好不要带有空格或中文(这是一直以来的习惯,因为有些库编译会因为这个原因出问题)【链接: https://pan.baidu.com/s/1jqIdBiA5CUBFHmJIpkXL6A 密码: j53a】
2、设置VC编译环境【编译32位64位有区别】
以下所有操作都是在【VS2015开发人员命令提示】中进行的,具体位置一般是【开始->所有程序->Visual Studio 2015-> Visual Studio Tools】下;
注意:编译64位需要打开【Visual Studio 2015 x64 本机工具命令提示符】;
1. 【编译32位openssl】
命令如下:
cd C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin
vcvars32.bat
2. 【编译64位openssl】
命令如下:
cd C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\amd64
vcvars64.bat
3、配置编译文件和类型【编译32位64位有区别】
1)先进入openssl-1.0.2j目录
cd C:\openssl-1.0.2j
2)配置输出目录和编译类型【编译32位、64位;release、debug有区别】
命令格式如下:
perl Configure [类型] no-asm --prefix="[输出目录]"
- [编译类型]可以选择以下:
参数 | 含义 |
---|---|
debug-VC-WIN32 | 编译32位debug版本 |
VC-WIN32 | 编译32位release版本 |
debug-VC-WIN64A | 编译64位debug版本 |
VC-WIN64A | 编译64位release版本 |
-
[输出目录]理论任何地方都可以。自己确定好就行
-
no-asm 即为去掉汇编
-
3)配置模式:
-
【编译32位openssl】
命令如下:ms\do_ms.bat
有网友指出,如果之前编译使用了no-asm参数,则需要修改命令为:
ms\do_nasm
否则会在编译引用了该openssl库的工程中出现”error LNK2001和error LNK2019 无法解析的外部符号”这个错误。(该解决方法由 WeiXin_zjmgly 提供,实际上我编译不需要,使用ms\do_ms.bat即可)
- 【编译64位openssl】 编译64位需要打开【Visual Studio 2015 x64 本机工具命令提示符】
- 命令如下:
ms\do_win64a.bat
执行这一步之后,在ms目录下会生成nt.mak和ntdll.mak两个编译配置文件
nt.mak 用于生成静态lib库
ntdll.mak 用于生成动态dll库 -
4、编译【编译静态库、动态库有区别】
- 【编译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.2j\
以编译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.2j\build-vc14-debug-win64-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
最后,附上一个我编译好的VS2015版本的openssl(1.0.2o)所有库,共4个链接库。
下载地址:https://pan.baidu.com/s/1z1b9jwlaROUr_M6O9T5ctQ 密码: 2wev