设为首页 加入收藏

TOP

Building OpenSSL for Visual Studio
2015-11-21 01:58:54 来源: 作者: 【 】 浏览:5
Tags: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
msdo_ms
nmake -f ms
t.mak 
nmake -f ms
t.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
msdo_ms
4、在类似notepad的文本编辑器中打开ms t.mak文件并将其中所有的/Zi替换成/Z7。将会有三个被替换。【7】

?

5、执行如下命令:

?

nmake -f ms
t.mak
nmake -f ms
t.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
msdo_win64a
nmake -f ms
t.mak
nmake -f ms
t.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
msdo_win64a
4、在文本编辑器中同上编辑那个文件,除了以ASM开头的那一行,共有两次替换。【8】

?

5、执行命令:

?

nmake -f ms
t.mak
nmake -f ms
t.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选项是不被支持的。

?

?

?

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇c++头文件 下一篇一个正整数N,不用sqrt求开方数

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: