OpenSSL在Win7 64位下的编译与安装

由于工作原因,想编写个基于OpenSSL的Server端用于测试,但没想到安装OpenSSL会那么的艰难……

首先,在Windows下安装OpenSSL有两种方法:
1、懒人版:OpenSSL官网没有提供windows版本的安装包,可以选择其他开源平台提供的工具。例如 http://slproweb.com/products/Win32OpenSSL.html。上面可以下载直接安装的.exe程序,狂点Nest即可(具体安装方法可参看:https://blog.csdn.net/kitok/article/details/72957185 )。但网上的大神们好像不太推崇这种做法,后续想要找开发相关的都是基于第二种安装方法下的lib,于是没有办法,只能硬着头皮上
2、坎坷版:编译的命令和步骤倒不复杂,只是每一步似乎都会有一些无法解释却又真实存在的bug等着你去解决……

一、安装Perl
1、下载ActivePerl 5.24.0.2400
http://www.activestate.com/activeperl/downloads
2、安装ActivePerl软件
安装成功后,设置环境变量,选中Path,单击编辑按钮,将C:\Perl64\site\bin;C:\Perl64\bin;加入其中,确认即可。
3、确认安装成功,运行cmd,输入perl -v,然后回车,出现perl版本号即可。
还有一个方法: 进入C:\Perl64\eg目录,输入“perl example.pl”,如果显示:”Hello from ActivePerl!”,则也表示安装成功。

二、安装Microsoft Visual Studio 2010
这个一般都会有吧,就不说了,另外,别的文章里提到要把路径加入到PATH里面去,但实际操作发现最后没加进去倒是成功了,之前加进去倒是一堆问题,此为后话,按住不表。

三、安装NASM
这个我一开始的时候没有安装,结果在configure的时候失败了,安装后再次尝试可以成功,感觉还是有用的。
当前稳定版本为:2.12.02
http://www.nasm.us/pub/nasm/releasebuilds/2.12.02/win64/
同样也是将nasm的路径添加至环境变量,例如我的nasm安装在 C:\Users\lenovo\AppData\Local\NASM 目录,则把 C:\Users\lenovo\AppData\Local\NASM ;加入PATH环境变量中。

四、下载OpenSSL
OpenSSL官方下载:https://www.openssl.org/source/
OpenSSL在Win7 64位下的编译与安装
目前支持的最新版本为1.1.1,但在configure的时候出错,无论什么方法都无法走下去了,于是换到1.1.0h版本(就是跟之前狂点Nest的exe同样的版本),换了之后倒是顺利的configure成功了(所以有点不清楚是NASM补安装的原因还是换版本的原因)

五、初始化编译环境
因为Visual Studio 2010安装在目录中D:\Program Files (x86)\Microsoft Visual Studio 10.0\ (我不喜欢装软件在C盘= =)
这里使用的是在Visual Studio Tools文件夹下的Visual Studio x64 Win64命令提示(2010)工具,以管理员的身份运行(其实左键点开就是管理员,不需要右键选管理员的样子。。)
然后进入Visual Studio 2010中的以下目录: cd D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64
执行命令:vcvars64.bat

六、呐呐呐,重点来了,准备那么久,终于可以编译OpenSSL了!!
1、首先进入到已解压的OpenSSL目录下:
在Visual Studio x64 Win64命令提示(2010)工具下:cd D:\openssl-1.1.0h
然后执行configure命令:perl Configure no-asm VC-WIN64A
在执行这个命令时,首先遇到了:
It looks like you don’t have either nmake or dmake.exe on your path
看了一堆的文章,有各种方法各种步骤,实在看不下去了。于是仅仅是按照提示去执行了一个命令:
ppm install dmake
再次执行就不提示这个错误了,但是!也没有提示成功……可这次也没有任何明显的错误提示了。
再努力一下(其实是很久),还是不行,于是放弃了一会。。

2、再次回头的时候,把所有打开的文章全部关掉,重新打开一个新的百度进行搜索。
于是补上了之前没有安装的NASM(谁让之前看到别人说“感觉没什么用,至少没有坏作用,先列着”,而且我又懒),又下载了1.1.0h版本(之前用的最新版本,总担心最新的版本出现新的问题而又没有新的解决方法)。
还是执行configure命令:perl Configure no-asm VC-WIN64A
这次成功了!!提示:configured for VC-WIN64A.

3、但也只是高兴了一小会,因为下一个命令又错了
接着按照文章所说执行:
ms\do_nasm
提示了:
“ms\do_nasm或ms\do_*” 不是内部命令,也不是可运行的程序或批处理文件。
有的介绍需要安装MASM(什么鬼!!)然后copy ml.exe文件到VS2010目录下就可以了,有的说VS2010的路径问题,blabla。。。
其实,原来VC自带的构建程序已经没有”ms\do”系列的程序了。
感谢:https://bbs.csdn.net/topics/392193545?page=1
所以不再执行ms\do_nasm和ms\do_win64a 这两个命令。

4、绕过这个大坑,继续执行下一个命令:nmake
一如既往,这次还是报错:

LINK :fatal error LNK1123: failure during conversion to COFF
我能怎么样,我也很绝望啊!!
又是一顿好找,
最后,感谢:http://www.cnblogs.com/newpanderking/articles/3372969.html
里面提到:
当安装VS2012之后,原来的.NET 4.0会被替换为.NET 4.5。卸载VS2012时,不会恢复.NET 4.0。
l 当VS2012安装后,VS2010的cvtres.exe就无法使用了。如果你的PATH环境变量中VS2010的工具路径第一个出现,而且链接器需要将.res文件转换为COFF 对象格式,就会导致LNK1123错误。
l 当VS生成PE文件头时,使用的cvtres.exe版本错误,不能与当前的.NET平台兼容。

所以,就是因为后续安装的framework的新版本把之前安装VS2010时的旧版本的cvtres.exe给换掉了,所以需要替换回来,这里我没有在PATH里面设置,而是进行了两处替换:用C:\Windows\Microsoft.NET\Framework\v4.0.30319目录下的cvtres.exe替换掉D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin和D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64两个目录下的cvtres.exe文件。
(另外,我由于绝望,把除了framework4.0的高版本卸载掉了,还重新修复了VS2010,以确保是framework 4.0)

在以上华丽的操作后,执行:nmake,华丽丽的成功了!!(因为没有提示错误了!)

5、最后执行:nmake test
结果:一个大大的PASS甩在屏幕上,这一天的折腾总算值了!
OpenSSL在Win7 64位下的编译与安装

6、其实这里还有真正的最后一步:nmake install
感谢:http://blogger.org.cn/blog/more.asp?name=OpenSSL&id=18972
是他让我知道了网上为何各种版本的安装攻略的存在原因:解压OpenSSL以后, 在其目录下可以发现有个INSTALL.W32文件,这个文件就是在windows下的安装说明。你可以用UltraEdit打开它。
是的,所有人的安装攻略皆源于官方的安装说明。但是!!每个版本的安装说明都不尽相同,于是也就出现了文章里面提及的各种方法。

7、安装完成后根据INSTALL文档的说明可以找到默认的安装目录:
Windows: C:\Program Files\OpenSSL or C:\Program Files (x86)\OpenSSL
后续编程需要用到的是:
C:\Program Files\OpenSSL\lib中的:libcrypto.lib、libssl.lib
C:\Program Files\OpenSSL\bin中的:libcrypto-1_1-x64.dll、libssl-1_1-x64.dll
OpenSSL在Win7 64位下的编译与安装
需要将以上的lib和DLL加入到工程当中,参考:(或我的下一篇文章)
https://www.cnblogs.com/freeliver54/p/4414778.html

六、后续说明
每个人的环境不一样,每个人遇到的问题也不一样,所以文章不可尽信,要广阅文章,吸其精华,去其糟粕。同时参考官方的安装指南(这个最为靠谱),将两者结合可以互相补充,因为官方文档中未提及遇到的问题解决方法。

安装流程文章参考:
https://blog.csdn.net/fjnjxr/article/details/77163739
https://bbs.csdn.net/topics/392193545?page=1