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 ?
要使用 Visual Studio 2015 构建静态链接的 64 位 OpenSSL(这会生成一个没有任何 DLL 的 .exe 文件),您需要满足以下先决条件:
您应该在系统范围内安装所有这些工具并将它们添加到您的%PATH%环境变量中。
获得我们需要的一切后,只需按照以下简单步骤操作:
创建C:\build目录并在命令提示符中发出以下命令:
cd c:\buildbuild使用以下命令将最新的 zlib 和 OpenSSL 源代码下载到您的目录:
git clone https://github.com/madler/zlibgit clone https://github.com/openssl/openssl首先我们必须构建 static zlib。为此,我们首先需要编辑一些配置文件:
zlib源文件夹:cd C:\build\zlib编辑win32\Makefile.msc文件:
CFLAGS-MD用。。。来代替-GL -MT -Zc:wchar_t-LDFLAGS-debug用。。。来代替-opt:icf -dynamicbase -nxcompat -ltcg /nodefaultlib:msvcrtzlib使用以下命令进行构建(应该需要不到一分钟的时间):
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\导航到OpenSSLsource:cd C:\build\openssl\并将其配置为使用静态 zlib 并openssl.cnf从目录中读取配置文件 ( ) C:\Windows\。
perl Configure VC-WIN64A no-shared zlib no-zlib-dynamic threads --prefix=C:\Windows\现在对 进行以下编辑C:\build\openssl\makefile:
CFLAG/Zc:wchar_t- /GL /ZiLDFLAGS/debug用。。。来代替/incremental:no /opt:icf /dynamicbase /nxcompat /ltcg /nodefaultlib:msvcrtEX_LIBSZLIB1用。。。来代替zlib.libOpenSSL通过发出命令进行构建nmake(大约需要 15 分钟)。
生成的约 3MBopenssl.exe文件将位于C:\build\openssl\apps\目录中。它是完全可移植的,因为包含了所有 DLL。如果您需要使用自定义配置文件,请将其复制C:\build\openssl\apps\openssl.cnf到您的C:\Windows\目录并根据您的喜好进行编辑。