如何在Windows上编译OpenSSL?

时间:2016-10-12 20:19:16

标签: c++ windows visual-studio-2012 openssl nasm

我一直在关注OpenSSL User Guide中的说明,该说明链接到a guide by 3noch以编译OpenSSL。以下是我使用的工具/版本:

  • ActiveState Perl v5.20.2
  • Microsoft Visual Studio 2012
  • Netwide Assembler(NASM)v2.12.02
  • OpenSSL 1.0.2j(源码tarball)

按照说明操作,我可以毫无问题地执行以下命令:

perl Configure VC-WIN32 --prefix=C:\Build-OpenSSL-VC-32
ms\do_ms

然后,当我继续执行

nmake -f ms\nt.mak

我收到以下

 Assembling: tmp32\sha1-586.asm
tmp32\sha1-586.asm(1432) : error A2070:invalid instruction operands
tmp32\sha1-586.asm(1576) : error A2070:invalid instruction operands
NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio 11.0
\VC\BIN\ml.EXE"' : return code '0x1'
Stop.

在调查该问题后,我发现blog post by HostageBrain提到了确切的错误,说明使用nasm来执行编译。所以,我切换到这个命令序列:

perl Configure VC-WIN32 --prefix=C:\Build-OpenSSL-VC-32
ms\do_nasm
nmake -f ms\nt.mak

但是,一旦切换到NASM变体,我会收到以下错误:

tmp32\sha1-586.asm:1: error: parser: instruction expected
tmp32\sha1-586.asm:2: error: parser: instruction expected
tmp32\sha1-586.asm:3: error: parser: instruction expected
tmp32\sha1-586.asm:4: warning: label alone on a line without a colon might be in error
tmp32\sha1-586.asm:5: warning: label alone on a line without a colon might be in error
tmp32\sha1-586.asm:6: warning: label alone on a line without a colon might be in error
tmp32\sha1-586.asm:7: error: symbol `IF' redefined
tmp32\sha1-586.asm:7: error: parser: instruction expected
tmp32\sha1-586.asm:8: error: parser: instruction expected
tmp32\sha1-586.asm:9: error: comma expected after operand 1

我正在寻找的是能够将OpenSSL编译成.lib文件,然后我可以从其他C ++项目链接到这些文件,例如编译FreeTDS时。

4 个答案:

答案 0 :(得分:4)

在你所引用的同一个博客页面上,我也描述了'no-asm'的情况 - 这种情况下编译起来比较简单(根本不需要nasm),但缺点是 - 某些算法性能将是2x-比汇编程序版本慢4倍。 如果您的案例可以接受这种表现 - 尝试编译'no-asm'案例。

perl Configure VC-WIN32 no-asm --prefix=C:\Build-OpenSSL-VC-32

答案 1 :(得分:2)

我知道这是一篇旧帖子,但对于其他有NASM解析错误问题的人来说,这就是解决方案:

一旦你运行ms \ do_ms.bat(使用masm)或ms \ do_nasm.bat(使用nasm),你不能在没有先清除tmp32目录的情况下切换到另一个,否则perl会永远不会正确重新生成.asm文件。你得到的解析器错误来自nasm试图组装一个masm格式的文件。

清除tmp32的最简单方法是运行“nmake -f ms \ nt.mak clean”。

答案 2 :(得分:1)

我使用VS 2015在Windows 10上使用常规命令提示符构建了库,其中包含以下命令(显示调试版本):

"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\amd64\vcvars64.bat"
perl Configure debug-VC-WIN64A --prefix=C:\Path\to\target\folder
ms\do_win64a
nmake -f ms\ntdll.mak
cd out32dll.dbg
..\ms\test
cd ..
nmake -f ms\ntdll.mak install

答案 3 :(得分:0)

回答这个非常古老的问题。在x64下构建它有一些问题,包括点击“未找到汇编器”,下载NASM和添加到路径等。使用MSYS2有一个非常好的简单解决方案。

安装MSYS2。确保您获得所需的工具链(请参阅pacman指南)。然后按照以下步骤操作 $启动msys2_shell.cmd -mingw64

$ wget -c ftp://ftp.pca.dfn.de/pub/tools/net/openssl/source/openssl-1.0.2o.tar.gz

$ tar -xzvf openssl-1.0.2o.tar.gz openssl-1.0.2o /

$ cd openssl-1.0.2o /

$。/ configure shared mingw64

$使

就是这样。在apps目录中,您将获得openssl可执行文件以及库。

-Sreejith。 D.梅农