我正在开发一个使用 OpenSSL 1.0.1e 库的 Windows C++ 应用程序。我使用的是 Visual Studio 2008。
出于可移植性的原因,我的应用程序与运行时库静态链接(/MT
and /MTd
选项)。我的应用程序不附带运行时库。
Per the OpenSSL 常见问题解答 http://www.openssl.org/support/faq.html,该库默认链接到多线程 DLL 运行时(/MDd
)这显然与我的场景不兼容。所以为了让我的程序正常工作,我添加了applink.c
到我的项目。在我的开发机器和大多数测试计算机上,该程序运行良好。
但不幸的是,我找到了应用程序无法启动的计算机。 Windows 显示错误:
The application failed to initialize properly (0xc0150002). Click on OK to
terminate the application.
我已经打开了libeay32.dll
在 Dependency Walker 中我看到了MSVCR90.dll
没有找到。所以技巧是applink.c
对我来说真的不起作用。
如何构建 OpenSSL/MT
or /MTd
选项?
要使用 Visual Studio 2015 构建静态链接的 64 位 OpenSSL(这会生成一个没有任何 DLL 的 .exe 文件),您需要满足以下先决条件:
- 适用于 Windows 的 Git。您可以在以下位置下载:https://git-scm.com/download/win https://git-scm.com/download/win。本指南使用版本2.11.0.3 https://github.com/git-for-windows/git/releases/download/v2.11.0.windows.3/Git-2.11.0.3-64-bit.exe.
- 草莓珍珠。您可以在以下位置下载:http://strawberryperl.com/ http://strawberryperl.com/(警告:强烈不推荐 ActivePerl。它will在此过程中给你带来奇怪的错误)。本指南使用版本5.24.1.1 http://strawberryperl.com/download/5.24.1.1/strawberry-perl-5.24.1.1-64bit.msi.
- NASM 汇编器,可从http://www.nasm.us/ http://www.nasm.us/。本指南使用版本 2.12.03rc1 http://www.nasm.us/pub/nasm/releasebuilds/2.12.03rc1/win64/nasm-2.12.03rc1-installer-x64.exe.
您需要在系统范围内安装所有这些工具并将它们添加到您的%PATH%
环境变量。
获得我们需要的一切后,只需按照以下简单步骤操作:
- Open VS2015 x64 本机工具命令提示符从你的开始菜单。您将看到命令提示符。
-
Create C:\build
目录并在命令提示符中发出以下命令:
-
下载最新的 zlib 和 OpenSSL 源代码到您的build
dir 使用以下命令:
git clone https://github.com/madler/zlib
git clone https://github.com/openssl/openssl
-
首先我们必须构建静态zlib
。为此,我们首先需要编辑一些配置文件:
-
Build zlib
使用以下命令(应该需要不到一分钟):
nmake -f win32/Makefile.msc AS=ml64 LOC="-DASMV -DASMINF -DNDEBUG -I." OBJA="inffasx64.obj gvmat64.obj inffas8664.obj"
-
将生成的文件复制到您的OpenSSL
目录:
xcopy zlib.h C:\build\openssl\
xcopy zconf.h C:\build\openssl\
xcopy zlib.lib C:\build\openssl\
xcopy zlib.pdb C:\build\openssl\
-
导航OpenSSL
来源:cd C:\build\openssl\
并将其配置为使用静态 zlib 并读取配置文件(openssl.cnf
) from C:\Windows\
目录。
perl Configure VC-WIN64A no-shared zlib no-zlib-dynamic threads --prefix=C:\Windows\
-
现在对以下内容进行编辑C:\build\openssl\makefile
:
- 找到以以下内容开头的行:
CFLAG
- Append:
/Zc:wchar_t- /GL /Zi
- 找到以以下内容开头的行:
LDFLAGS
- Replace
/debug
with /incremental:no /opt:icf /dynamicbase /nxcompat /ltcg /nodefaultlib:msvcrt
- 找到以以下内容开头的行:
EX_LIBS
- Replace
ZLIB1
with zlib.lib
- 保存更改
Build OpenSSL
通过发出nmake
命令(大约需要 15 分钟)。
结果~3MBopenssl.exe
文件将位于C:\build\openssl\apps\
目录。它是完全可移植的,因为包含了所有 DLL。如果需要使用自定义配置文件,复制C:\build\openssl\apps\openssl.cnf
给你的C:\Windows\
目录并根据您的喜好进行编辑。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)