Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual c++ 使用/MD开关构建OpenSSL库的静态版本_Visual C++_Openssl - Fatal编程技术网

Visual c++ 使用/MD开关构建OpenSSL库的静态版本

Visual c++ 使用/MD开关构建OpenSSL库的静态版本,visual-c++,openssl,Visual C++,Openssl,使用默认配置构建OpenSSL可以为您提供库的动态版本。根据its上的OpenSSL编译和安装文档,有一个名为no shared的配置选项,它禁用共享对象,只创建一个静态库 Visual C++编译器将二进制(库或应用程序)链接到LIbCMT(d).LIB(静态地将本地CRT启动程序链接到使用/MT(d)的代码)或MSVCRT(d).LIB(静态CRT启动库,用于DLL UCRT和VCRUNTIME使用/MD(D))。 链接本身与CRT链接不同的二进制文件会导致冲突。不幸的是,OpenSSL没

使用默认配置构建OpenSSL可以为您提供库的动态版本。根据its上的OpenSSL编译和安装文档,有一个名为no shared的配置选项,它禁用共享对象,只创建一个静态库

Visual C++编译器将二进制(库或应用程序)链接到LIbCMT(d).LIB(静态地将本地CRT启动程序链接到使用/MT(d)的代码)或MSVCRT(d).LIB(静态CRT启动库,用于DLL UCRT和VCRUNTIME使用/MD(D))。


链接本身与CRT链接不同的二进制文件会导致冲突。不幸的是,OpenSSL没有给我们设置这个编译器开关的选项。它总是使用/MD构建其动态版本,使用/MT构建其静态版本。因此,当我们有其他使用/MD链接的静态库(如Qt)时,当我们想要将其静态版本链接到我们的应用程序时,我们应该做些什么呢?

有一些预先构建的二进制文件在线可用,它们以这种方式链接,但总有一个自己构建OpenSSL的好理由。最重要的原因可能是安全考虑,或者有时你发现这些预编译二进制文件没有编译你想要的Visual C++版本或你想要的配置。我已经在网络上搜索过了,但是找不到一个简单的方法来使用/MD编译器开关构建OpenSSL的静态版本,而不需要额外复杂的构建脚本。其中一些只使用较旧版本的库(即1.0.x)。所以我决定分享我的方式

注意:在以下步骤中,不要在名称中有空格的目录中放置任何内容

步骤1。OpenSSL构建脚本是使用Perl编写的。因此,如果您没有Perl,请先安装它。我用的是便携版的

步骤2。您需要一个32位和/或64位版本的nasm assembler,这取决于您决定为哪个平台构建OpenSSL。你可以下载一份。将所需版本添加到系统路径

步骤3。从its下载最新稳定版本的OpenSSL源代码并将其解压缩。从干净的下载构建OpenSSL是一个好主意。因此,为以后的构建保留一份副本(可能使用不同的配置)

步骤4。打开草莓Perl portable shell并转到OpenSSL源代码目录

步骤5。使用以下命令创建OpenSSL make文件:

perl配置平台[选项][--debug]--prefix=绝对路径 --openssldir=相同的路径

  • 平台可以是VC-WIN32、VC-WIN64A等

  • 我有一些有趣的选择:

    • 无共享:禁用共享对象(仅创建静态库)
    • no stdio:不要使用C头文件“stdio.h”中使用“file”类型的任何内容。使用此选项可以避免将最终二进制文件链接到crypt32.lib
    • 无套接字:不构建对套接字BIOs的支持。使用此选项可以避免将最终二进制文件链接到Ws2_32.lib
  • 根据OpenSSL编译和安装文档,当您想要对所有最新版本的OpenSSL(包括OpenSSL 1.0.2和1.1.0)都“正常工作”时,请同时指定--prefix和--openssldir,并将两者设置为相同的位置

步骤6。在OpenSSL源代码目录下,打开makefile并查找LIB\u CFLAGS。根据是否编译发布版本,将/MT更改为/MD或/MDd。您可以将调试信息(pdb文件的内容)链接到库。为此,请删除/Fdossl_static并将/Zl编译器切换为/Z7

步骤7。运行Visual Studio x86/x64本机工具命令(根据您决定为哪个平台构建OpenSSL)并转到OpenSSL源代码目录。然后,最后运行以下命令:

恩马克

nmake安装


享受你的时光。特别感谢我的朋友。

网上有一些预先构建的二进制文件,它们以这种方式链接,但自己构建OpenSSL总是有很好的理由的。最重要的原因可能是安全考虑,或者有时你发现这些预编译二进制文件没有编译你想要的Visual C++版本或你想要的配置。我已经在网络上搜索过了,但是找不到一个简单的方法来使用/MD编译器开关构建OpenSSL的静态版本,而不需要额外复杂的构建脚本。其中一些只使用较旧版本的库(即1.0.x)。所以我决定分享我的方式

注意:在以下步骤中,不要在名称中有空格的目录中放置任何内容

步骤1。OpenSSL构建脚本是使用Perl编写的。因此,如果您没有Perl,请先安装它。我用的是便携版的

步骤2。您需要一个32位和/或64位版本的nasm assembler,这取决于您决定为哪个平台构建OpenSSL。你可以下载一份。将所需版本添加到系统路径

步骤3。从its下载最新稳定版本的OpenSSL源代码并将其解压缩。从干净的下载构建OpenSSL是一个好主意。因此,为以后的构建保留一份副本(可能使用不同的配置)

步骤4。打开草莓Perl portable shell并转到OpenSSL源代码目录

步骤5。使用以下命令创建OpenSSL make文件:

perl配置平台[选项][--debug]--prefix=绝对路径 --openssldir=相同的路径