如何构建针对 Windows 运行时静态链接的 OpenSSL?

2024-01-08

我正在开发一个使用 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%环境变量。

获得我们需要的一切后,只需按照以下简单步骤操作:

  1. Open VS2015 x64 本机工具命令提示符从你的开始菜单。您将看到命令提示符。
  2. Create C:\build目录并在命令提示符中发出以下命令:

    • cd c:\build
  3. 下载最新的 zlib 和 OpenSSL 源代码到您的builddir 使用以下命令:

    • git clone https://github.com/madler/zlib
    • git clone https://github.com/openssl/openssl
  4. 首先我们必须构建静态zlib。为此,我们首先需要编辑一些配置文件:

    • 导航至zlib源文件夹:cd C:\build\zlib
    • 编辑win32\Makefile.msc file:

      1. 找到以以下内容开头的行CFLAGS
      2. Replace -MD with -GL -MT -Zc:wchar_t-
      3. 找到以以下内容开头的行LDFLAGS
      4. Replace -debug with -opt:icf -dynamicbase -nxcompat -ltcg /nodefaultlib:msvcrt
  5. Build zlib使用以下命令(应该需要不到一分钟):

    • nmake -f win32/Makefile.msc AS=ml64 LOC="-DASMV -DASMINF -DNDEBUG -I." OBJA="inffasx64.obj gvmat64.obj inffas8664.obj"
  6. 将生成的文件复制到您的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\
  7. 导航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\
  8. 现在对以下内容进行编辑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
    • 保存更改
  9. Build OpenSSL通过发出nmake命令(大约需要 15 分钟)。

结果~3MBopenssl.exe文件将位于C:\build\openssl\apps\目录。它是完全可移植的,因为包含了所有 DLL。如果需要使用自定义配置文件,复制C:\build\openssl\apps\openssl.cnf给你的C:\Windows\目录并根据您的喜好进行编辑。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何构建针对 Windows 运行时静态链接的 OpenSSL? 的相关文章

随机推荐