如何在Windows上编译OpenSSL

How to compile OpenSSL on Windows?

本文关键字:编译 OpenSSL Windows      更新时间:2023-10-16

我一直在遵循OpenSSL用户指南中的说明,该指南链接到3noch编译OpenSSL的指南。以下是我正在使用的工具/版本:

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

按照说明,我可以执行以下命令而不会出现问题:

perl Configure VC-WIN32 --prefix=C:Build-OpenSSL-VC-32
msdo_ms

然后,当我继续执行

nmake -f msnt.mak

我收到以下

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

在调查了这个问题之后,我发现HostageBrain的一篇博客文章提到了那个确切的错误,声明使用nasm来执行编译。因此,我切换到以下命令序列:

perl Configure VC-WIN32 --prefix=C:Build-OpenSSL-VC-32
msdo_nasm
nmake -f msnt.mak

然而,一旦切换到NASM变体,我收到以下错误:

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

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

在我的博客页面上,我也描述了'无asm'的情况-这种情况更容易编译(它根本不需要nasm),但缺点是-一些算法的性能将比汇编版本慢2 -4倍。如果您的案例可以接受此性能-尝试编译'no-asm'案例。

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

我在Windows 10和VS 2015上使用以下命令(显示调试构建)从常规命令提示符构建库:

"C:Program Files (x86)Microsoft Visual Studio 14.0VCbinamd64vcvars64.bat"
perl Configure debug-VC-WIN64A --prefix=C:Pathtotargetfolder
msdo_win64a
nmake -f msntdll.mak
cd out32dll.dbg
..mstest
cd ..
nmake -f msntdll.mak install

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

一旦您运行msdo_ms.bat(使用masm)或msdo_nasm.bat(使用nasm),您不能在没有首先清除tmp32目录的情况下切换到另一个,否则perl将永远无法正确地重新生成.asm文件。您得到的解析器错误是由于nasm试图组装一个masm格式的文件。

清理tmp32最简单的方法是运行"nmake -f msnt"。mak清洁"。

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

安装MSYS2。确保获得所需的工具链(参见《吃豆人》指南)。然后按照以下步骤操作发射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.20 .tar.gz/

$ cd openssl-1.0.2o/

$。/configure shared mingw64

使美元

就是这样。在apps目录下,你会得到openssl可执行文件和库。

-Sreejith。d·梅农