如何在Windows上编译OpenSSL
How to compile OpenSSL on Windows?
我一直在遵循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·梅农
- 如何在 Windows x64 上编译支持 fips 的 openssl?
- 静态编译的Qt 5.13.1与OpenSSL 1.1.1d生成QSslSocket::connectToHostEncr
- 带有 openssl 编译的 Lib curl 失败
- Findopenssl.cmake 无法找到 OpenSSL,编译 restbed,C++
- Boost 1_65_1 不能使用 OpenSSL 1.1.0g "undefined reference" 编译,但可以使用 "nm"
- 试图编译Boost和openSSL时(使用WebSocket 或CPPRESTSDK)进行编译错误
- 使用自行编译的OpenSSL在fedora 21上编译比特币
- OpenSSL编译在x86上失败,认为x86_64是成功的
- OpenSSL使用Cmake从源代码进行编译
- 使用OpenSSL(Windows)的Qt中出现编译错误LNK2019
- 在Android上编译OpenSSL
- Curl-openssl编译会产生大量链接器错误
- 编译支持 OpenSSL 的 Windows Phone 8.1 Qt 5.5 时出现问题
- 在Windows中使用Dynamic Zlib编译OpenSSL
- 编译带有 openSSL 错误的静态 Qt
- D8048:无法使用 /ZW 选项编译 C 文件 'openssl\applink.c'
- Openssl Sha1 编译问题
- 在Ubuntu 11.10上编译C++和OpenSSL
- 如何在Windows上编译OpenSSL
- 你如何为 x64 编译 OpenSSL