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

use*_*991 9 c windows openssl static-libraries static-linking

我正在开发一个使用OpenSSL 1.0.1e库的Windows C++应用程序.我在Visual Studio 2008上.

出于可移植性的原因,我的应用程序与运行时库(/MT/MTd选项)静态链接.我不会在我的应用程序中发布运行时库.

根据OpenSSL FAQ,默认情况下,库与多线程DLL运行时(/MDd)链接,这显然与我的场景不兼容.所以为了使我的程序工作,我已经添加applink.c到我的项目中.在我的开发机器和大多数测试计算机上,程序运行正常.

但不幸的是,我找到了应用程序无法启动的计算机.Windows显示错误:

The application failed to initialize properly (0xc0150002). Click on OK to
terminate the application. 
Run Code Online (Sandbox Code Playgroud)

libeay32.dll在Dependency Walker中打开了,我MSVCR90.dll发现找不到了.所以诀窍applink.c并不适合我.

如何使用/MT/MTd选项构建OpenSSL ?

Anu*_*ioz 7

要使用 Visual Studio 2015 构建静态链接的 64 位 OpenSSL(这会生成一个没有任何 DLL 的 .exe 文件),您需要满足以下先决条件:

您应该在系统范围内安装所有这些工具并将它们添加到您的%PATH%环境变量中。

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

  1. 从开始菜单打开VS2015 x64 Native Tools 命令提示符。您将看到命令提示符。
  2. 创建C:\build目录并在命令提示符中发出以下命令:

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

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

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

      1. 找到以以下内容开头的行CFLAGS
      2. -MD用。。。来代替-GL -MT -Zc:wchar_t-
      3. 找到以以下内容开头的行LDFLAGS
      4. -debug用。。。来代替-opt:icf -dynamicbase -nxcompat -ltcg /nodefaultlib:msvcrt
  5. 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. 导航到OpenSSLsource:cd C:\build\openssl\并将其配置为使用静态 zlib 并openssl.cnf从目录中读取配置文件 ( ) C:\Windows\

    • perl Configure VC-WIN64A no-shared zlib no-zlib-dynamic threads --prefix=C:\Windows\
  8. 现在对 进行以下编辑C:\build\openssl\makefile

    • 找到以以下内容开头的行:CFLAG
    • 附加:/Zc:wchar_t- /GL /Zi
    • 找到以以下内容开头的行:LDFLAGS
    • /debug用。。。来代替/incremental:no /opt:icf /dynamicbase /nxcompat /ltcg /nodefaultlib:msvcrt
    • 找到以以下内容开头的行:EX_LIBS
    • ZLIB1用。。。来代替zlib.lib
    • 保存更改
  9. OpenSSL通过发出命令进行构建nmake(大约需要 15 分钟)。

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


Len*_*ate 6

使用nt.makmakefile而不是ntdll.makmakefile.

顺便说一下,我已经围绕标准的OpenSSL构建脚本编写了一些脚本,这使得"(至少对我来说)在Windows上使用OpenSSL同时兼容x86和x64更容易",您可以从这里获取它们.