博主亲测有效。
转载请注明出处:http://blog.csdn.net/xiaoy_h/article/details/36444013
原英文帖子:http://developer.covenanteyes.com/building-openssl-for-visual-studio/
译文:
在Windows上生成支持VS的OpenSSL是相当简单,但简单地事情却又蜿蜒曲折,我将会在此写下这曲折经历,将来的实验当中才能减少伤痛。
(来外说话真有情调啊)
你需要做什么?
你需要安装:
VS2010(这个将会最大可能地与老版本兼容)
ActivePerl【1】
最新版的 OpenSSL source-code【2】
生成配置
解压【3】OpenSSL源码到两个文件夹,一个用于32位生成,一个用于64位【4】。比如,可以解压到C:\openssl-src-32 和 C:\openssl-src-64 目录下。
生成32位静态库
1、打开Visual Studio 命令提示符 (2010)【5】
2、CD命令进入32位源码目录(比如:cd C:\openssl-src-32).
3、执行如下命令:【6】
perl Configure VC-WIN32 --prefix=C:\Build-OpenSSL-VC-32
ms\do_ms
nmake -f ms\nt.mak
nmake -f ms\nt.mak install
最终将生成在C:\Build-OpenSSL-VC-32.目录
生成32位调试版本静态库
这些步骤将会直接嵌入调试标识到lib文件中。不要期望看到任何pdb文件。
1、同上打开命令提示符
2、同上cd进源码目录(还是 C:\openssl-src-32)
3、执行如下命令:
perl Configure debug-VC-WIN32 --prefix=C:\Build-OpenSSL-VC-32-dbg
ms\do_ms
4、在类似notepad的文本编辑器中打开ms\nt.mak文件并将其中所有的/Zi替换成/Z7。将会有三个被替换。【7】
5、执行如下命令:
nmake -f ms\nt.mak
nmake -f ms\nt.mak install
最终生成在目录C:\Build-OpenSSL-VC-32-dbg。并将某些文件改成如下名字:libeay32-debug.lib 和ssleay32-debug.lib
生成64位静态库
1、打开VisualStudio x64 命令提示符(在开始菜单中找)
2、cd进OpenSSL的64位源码文件夹 (e.g. cd C:\openssl-src-64)
3、执行命令:
perl Configure VC-WIN64A --prefix=C:\Build-OpenSSL-VC-64
ms\do_win64a
nmake -f ms\nt.mak
nmake -f ms\nt.mak install
这将输出在C:\Build-OpenSSL-VC-64目录
注意:这次输出的名字还是叫libeay32.lib 和 ssleay32.lib。你必须自行将名字改成对应的名字(避免混淆)。
生成带调试符的64位静态库
这些步骤将会直接嵌入调试标识到lib文件中。不要期望看到任何pdb文件。
1、打开VisualStudio x64 命令提示符
2、cd进OpenSSL的64位源码文件夹 (e.g. cd C:\openssl-src-64)
3、执行命令:
perl Configure debug-VC-WIN64A --prefix=C:\Build-OpenSSL-VC-64-dbg
ms\do_win64a
4、在文本编辑器中同上编辑那个文件,除了以ASM开头的那一行,共有两次替换。【8】
5、执行命令:
nmake -f ms\nt.mak
nmake -f ms\nt.mak install
这将输出在这个目录下:C:\Build-OpenSSL-VC-64-dbg。同事名字也要改成这样的:libeay64-debug.lib 和ssleay64-debug.lib.
不要做什么?
我在sun下尝试了每一种可以链接到VS工程的方法来获取OpenSSL的windows生成。在这条路上我学到了很多。这些就是我知道的不要去做的事情:
-不要盲目遵循OpenSSL源码目录下给出的WIN32/64安装指令。到网上找指南。
-不要在Cygwin中生成OpenSSL。这虽然简单,但是最终不能成功链接到VS。
-不要在MSYS和MinGW中建立OpenSSL。这很困难,而且也不能成功链接到VS。
-不要使用Windows安装指令做提到的NASM,这对VS的Build来说没有必要。(无论怎么说它只支持32位的。)
-Strawberry Perl在这些奇葩的配置中并不总是有效。ActivePerl似乎更稳定。
-不要在相同的目录里建立32位和64位OpenSSL。第一个生成操作将会在目录中留下些"遗物",这些将会搅乱第二个生成操作。(很明显的是,执行一个clean是远远不够的。)
-不要尝试在VS 64位命令提示符里建立32位OpenSSL,反之亦然。这将不会有任何效果。
引用
以下将是非常有用的网址:
https://github.com/freelan-developers/freelan-buildtools/blob/master/INSTALL.md
脚注:
【1】、不要使用Strawberry Perl(可以看post来的评论)。
【2】、OpenSSL version 1.0.1c是写这篇文章时的最新版本。
【3】、7-zip可以很好地在Windows解压缩.tar.gz文件。这是一个两步处理过程。
【4】、OpenSSL的生成脚本对于在一个队列中处理两个平台下的build不够智能。不同平台的生成必须从头开始。
【5】、你可以在开始菜单的某个地方找他它。
【6】、使用ms\\ntdll.mak反而会生成共享库。
【7】、/Zi选项虽然有用,但是不指定更多的选项将很难找到正确的.pdb文件。简单地说,/Z7选项仅仅是将所有的调试标识嵌入到lib文件。到这里看更多细节。
【8】、为了生成64位版本,VS使用MASM(ml64.exe)来编译程序集代码。根据MASM’s documentation,/Z7选项是不被支持的。