我一直在遵循OpenSSL用户指南中的说明,该指南链接到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.
在调查该问题后,我发现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时使用。
ml.exe
的引用表示使用MASM,而不是NASM。*sha1-586.asm:1: error: parser: instruction expected
*消息似乎表明出现了Perl的问题。我相信在Configure期间运行了一个OpenSSL脚本,用于修复汇编程序的ASM问题。你可以尝试使用最新的Active Perl(5.24)或Strawberry Perl(5.24)吗?更改后,你需要清理并重新配置。 - jww