Openssl VS编译方法
工具:
1. 编译环境win10+vs2015专业版
2. ActivePerl工具,官网下载链接:http://www.activestate.com/activeperl/downloads
3. openssl源码,下载链接:https://www.openssl.org/source/,选择2016-May-03 13:57:13 openssl-1.0.1t.tar.gz这个版本,之所以没有选择1.1.0,发觉两个版本差异较大,ms文件夹下缺少很多文件,没办法按照此方法编译。
步骤:
1. 安装ActivePerl, 并添加环境变量(可以默认勾选,或者手动添加,如path=d:\perl\bin)。
2. 解压openssl。
3. 点击 windows 开始->所有应用->vs2015->开发者命令提示(Developer Command Prompt for 2015)。
4. CD到解压后的openssl的根目录。
5. 执行命令:perl Configure debug-VC-WIN32(或者VC-WIN64A,取决于编译库类型,可以用–prefix=路径指定生成路径).
6. ms\do_ms.bat(创建makefile文件,64位需要使用ms\do_win64a.bat)
7. 执行nmake -f ms\ntdll.mak(编译动态库)。
8. 执行nmake -f ms\ntdll.mak test查看库是否有问题。
9. 执行nmake -f ms\ntdll.mak install 。
TIPs:
编译动态库:
nmake -f ms\ntdll.mak
编译静态库:
nmake -f ms\nt.mak
测试动态库:
nmake -f ms\ntdll.mak test
测试静态库:
nmake -f ms\nt.mak test
安装动态库:
nmake -f ms\ntdll.mak install
安装静态库:
nmake -f ms\nt.mak install
清除上次动态库的编译,以便重新编译:
nmake -f ms\ntdll.mak clean
清除上次静态库的编译,以便重新编译:
nmake -f ms\nt.mak clean
- [编译类型]可以选择以下:
参数 | 含义 |
---|---|
debug-VC-WIN32 | 编译32位debug版本 |
VC-WIN32 | 编译32位release版本 |
debug-VC-WIN64A | 编译64位debug版本 |
VC-WIN64A | 编译64位release版本 |
-
[输出目录]理论任何地方都可以。自己确定好就行
-
-
3)配置模式:
-
【编译32位openssl】
命令如下:ms\do_ms.bat
- 1
感谢CSDN网友:WeiXin_zjmgly指出,如果之前编译使用了no-asm参数,则需要修改命令为:
ms\do_nasm
- 1
否则会在编译引用了该openssl库的工程中出现”error LNK2001和error LNK2019 无法解析的外部符号”这个错误。(该解决方法由 WeiXin_zjmgly 提供)
- 【编译64位openssl】
命令如下:
ms\do_win64a.bat
- 1
执行这一步之后,在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
- 1
- 2
- 3
- 【编译openssl动态链接库】
命令如下:
nmake -f ms\ntdll.mak nmake -f ms\ntdll.mak test nmake -f ms\ntdll.mak install
- 1
- 2
- 3
- 执行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.
- 1
- 2
- 3
- 4
- 5
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
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
至此,就可以将c:\openssl-1.0.2j\build-vc14-debug-win64-dll目录复制到需要使用的地方就可以使用了。
最后,附上一个我编译好的VS2015版本的openssl(1.0.2j)所有库,共八个链接库。
下载地址:http://download.csdn.net/detail/yaojingkao/9673763 -