如何在 Visual Studio 中包含 OpenSSL
How to include OpenSSL in Visual Studio
我很难尝试将 openssl 添加到我的项目中。我已经下载了 windows 的预编译安装程序,并且安装了库,但我找不到在我的项目中包含 openssl 的方法。
注意:我在 Windows 7 x64 上使用 Visual Studio Expres 2012,但它不限于该环境。
简介
虽然问题/答案是基于:
- OpenSSL 1.0.1*
- VStudio 2012
适用于任意 OpenSSL版本(v.0.9.*, v1.0.*, v1.1.*, v3.0),和 any VStudio 版本 (v2005+)
OpenSSL 版本也可在 [GitHub]: CristiFati/Prebuilt-Binaries - (master) Prebuilt-Binaries/OpenSSL
获得
假设您已经在 dir 中安装了 OpenSSL,例如:"C:\Program Files\Openssl-Win32-1.0.1p ....."(或任何其他名称);我将把它称为 OPENSSL_INSTALL_DIR(因为它是 Nix 风格 env var)。所以,${OPENSSL_INSTALL_DIR} 应该包含一堆 dirs 和文件,其中对我们来说很重要:
目录s:
- 包括
- lib
文件(由于它们的名称因版本而异,我将使用(同样,Nix 样式 var) 占位符;它们也可能位于 bin subdir):
- ${LIBCRYPTO}.dll
- ${LIBSSL}.dll
其中 LIBCRYPTO (#1.) 和 LIBSSL(#2.)定义如下:
v1.0.2 及更早版本
- libeay32
- ssleay32(也可能被复制(或 symlinked)到 libssl32)
v1.1.*
- libcrypto-1_*(-x64)
- libssl-1_*(-x64)
v3.0
- libcrypto-3*
- libssl-3*
为了使用它,在您的 VStudio 项目中,您必须:
1.配置编译器 ([MS.Docs]: Compiler Options Listed Alphabetically)
指示它:
Where 搜索包含(头文件(.h))文件。转到您的“项目属性 -> C/C++ -> 常规 -> 附加包含目录”并添加 ${OPENSSL_INSTALL_DIR}\include(如果需要添加其他路径,用分号隔开(;)).现在您可以在源代码中包含 OpenSSL 头文件。
请注意,因为“${OPENSSL_INSTALL_DIR}\include”dir 包含一个 openssl 子目录,该子目录下是实际的头文件,您的 #include 子句必须如下所示:
#include <openssl/ssl.h>
当然你可以添加 ${OPENSSL_INSTALL_DIR}\include\openssl dir 到你的项目,然后上面的包含语句将是:
#include <ssl.h>
但前者是首选(推荐)
2。配置链接器 ([MS.Docs]: Linker Options)
指示它:
在哪里搜索图书馆。您可以通过转到“项目属性 -> 链接器 -> 常规 -> 附加库目录”并添加 ${OPENSSL_INSTALL_DIR}\lib(同样,如果有多个路径,用;分隔)
要使用什么 库。 "${OPENSSL_INSTALL_DIR}\lib" dir 包含一堆 .lib 文件.其中,您(很可能)只需要 ${LIBCRYPTO}.lib 和/或 ${LIBSSL}.lib。转到您的“项目属性 -> 链接器 -> 输入 -> 附加依赖项”并在现有库旁边添加这两个库
3。构建并 运行
现在,如果您的所有设置和源代码都正确,您应该有一个“可构建的”项目。当您想要 运行 您的项目输出(.exe 或 .dll 另一个可执行文件需要,我在这里不讨论您使用 static libs 的可能性),可执行文件将需要找到我在开头提到的 2 .dll。为此,您应该 :
将他们的 dir 添加到您的 PATH env var(我认为这是最干净的)。示例(来自控制台):set PATH=%PATH%;${OPENSSL_INSTALL_DIR}
对于 运行ning VStudio 实例:
将它们复制到您的可执行文件所在的文件夹中 ([MS.Docs]: Dynamic-Link Library Search Order)
将它们复制到 dir 中的一个 %PATH%.
Some安装程序可能会在您的“%SystemRoot%\System32”dir 中复制 2 .dll,并且在那种情况下,这将不再是必要的(我发现这种在系统 dir 中复制内容的做法是不好的,因为在我们当前的示例中,多个版本可以提供相同的文件名,并且安装的最后一个会覆盖所有其他的)
重要说明:将项目定位为 32 位 或 64 位 时必须小心(在 VStudio IDE[= 中将 Platform 设置为 Win32 或 x64 227=]) - 必须匹配您的 OpenSSL 安装架构。
用柯南。安装使用非常简单:
您可以请求准备好使用的文件。例如 Linux x64 或 Visual Studio 2012 的用法...这里有一个示例说明:
conan install OpenSSL/1.0.2g@lasote/stable -s arch="x86_64" -s build_type="Debug" -s compiler="gcc" -s compiler.version="5.3" -s os="Linux" -o 386="False" -o no_asm="False" -o no_rsa="False" -o no_cast="False" -o no_hmac="False" -o no_sse2="False" -o no_zlib="False" ...
自最初提出这个问题以来,发生了很多变化。从那时起 vcpkg
就出现了,并使安装外部库变得更加容易。
要安装和使用 vcpkg,请使用以下命令:
git clone https://github.com/Microsoft/vcpkg
cd vcpkg
bootstrap-vcpkg.bat
vcpkg integrate install
最后一个命令是可选的,但建议 User-wide 集成。
然后安装 OpenSsl,尝试以下操作:
vcpkg search ssl
vcpkg install openssl-windows --triplet x64-windows
您的选项可能因平台具体情况而异。
重新启动 Visual Studio,您应该可以开始了。
已使用 Visual Studio 社区 2019 进行测试。
参考文献:
我很难尝试将 openssl 添加到我的项目中。我已经下载了 windows 的预编译安装程序,并且安装了库,但我找不到在我的项目中包含 openssl 的方法。
注意:我在 Windows 7 x64 上使用 Visual Studio Expres 2012,但它不限于该环境。
简介
虽然问题/答案是基于:
- OpenSSL 1.0.1*
- VStudio 2012
适用于任意 OpenSSL版本(v.0.9.*, v1.0.*, v1.1.*, v3.0),和 any VStudio 版本 (v2005+)OpenSSL 版本也可在 [GitHub]: CristiFati/Prebuilt-Binaries - (master) Prebuilt-Binaries/OpenSSL
获得
假设您已经在 dir 中安装了 OpenSSL,例如:"C:\Program Files\Openssl-Win32-1.0.1p ....."(或任何其他名称);我将把它称为 OPENSSL_INSTALL_DIR(因为它是 Nix 风格 env var)。所以,${OPENSSL_INSTALL_DIR} 应该包含一堆 dirs 和文件,其中对我们来说很重要:
目录s:
- 包括
- lib
文件(由于它们的名称因版本而异,我将使用(同样,Nix 样式 var) 占位符;它们也可能位于 bin subdir):
- ${LIBCRYPTO}.dll
- ${LIBSSL}.dll
其中 LIBCRYPTO (#1.) 和 LIBSSL(#2.)定义如下:v1.0.2 及更早版本
- libeay32
- ssleay32(也可能被复制(或 symlinked)到 libssl32)
v1.1.*
- libcrypto-1_*(-x64)
- libssl-1_*(-x64)
v3.0
- libcrypto-3*
- libssl-3*
为了使用它,在您的 VStudio 项目中,您必须:
1.配置编译器 ([MS.Docs]: Compiler Options Listed Alphabetically)
指示它:
Where 搜索包含(头文件(.h))文件。转到您的“项目属性 -> C/C++ -> 常规 -> 附加包含目录”并添加 ${OPENSSL_INSTALL_DIR}\include(如果需要添加其他路径,用分号隔开(;)).现在您可以在源代码中包含 OpenSSL 头文件。
请注意,因为“${OPENSSL_INSTALL_DIR}\include”dir 包含一个 openssl 子目录,该子目录下是实际的头文件,您的 #include 子句必须如下所示:#include <openssl/ssl.h>
当然你可以添加 ${OPENSSL_INSTALL_DIR}\include\openssl dir 到你的项目,然后上面的包含语句将是:
#include <ssl.h>
但前者是首选(推荐)
2。配置链接器 ([MS.Docs]: Linker Options)
指示它:
在哪里搜索图书馆。您可以通过转到“项目属性 -> 链接器 -> 常规 -> 附加库目录”并添加 ${OPENSSL_INSTALL_DIR}\lib(同样,如果有多个路径,用;分隔)
要使用什么 库。 "${OPENSSL_INSTALL_DIR}\lib" dir 包含一堆 .lib 文件.其中,您(很可能)只需要 ${LIBCRYPTO}.lib 和/或 ${LIBSSL}.lib。转到您的“项目属性 -> 链接器 -> 输入 -> 附加依赖项”并在现有库旁边添加这两个库
3。构建并 运行
现在,如果您的所有设置和源代码都正确,您应该有一个“可构建的”项目。当您想要 运行 您的项目输出(.exe 或 .dll 另一个可执行文件需要,我在这里不讨论您使用 static libs 的可能性),可执行文件将需要找到我在开头提到的 2 .dll。为此,您应该 :
将他们的 dir 添加到您的 PATH env var(我认为这是最干净的)。示例(来自控制台):
set PATH=%PATH%;${OPENSSL_INSTALL_DIR}
对于 运行ning VStudio 实例:
将它们复制到您的可执行文件所在的文件夹中 ([MS.Docs]: Dynamic-Link Library Search Order)
将它们复制到 dir 中的一个 %PATH%.
Some安装程序可能会在您的“%SystemRoot%\System32”dir 中复制 2 .dll,并且在那种情况下,这将不再是必要的(我发现这种在系统 dir 中复制内容的做法是不好的,因为在我们当前的示例中,多个版本可以提供相同的文件名,并且安装的最后一个会覆盖所有其他的)
重要说明:将项目定位为 32 位 或 64 位 时必须小心(在 VStudio IDE[= 中将 Platform 设置为 Win32 或 x64 227=]) - 必须匹配您的 OpenSSL 安装架构。
用柯南。安装使用非常简单:
您可以请求准备好使用的文件。例如 Linux x64 或 Visual Studio 2012 的用法...这里有一个示例说明:
conan install OpenSSL/1.0.2g@lasote/stable -s arch="x86_64" -s build_type="Debug" -s compiler="gcc" -s compiler.version="5.3" -s os="Linux" -o 386="False" -o no_asm="False" -o no_rsa="False" -o no_cast="False" -o no_hmac="False" -o no_sse2="False" -o no_zlib="False" ...
自最初提出这个问题以来,发生了很多变化。从那时起 vcpkg
就出现了,并使安装外部库变得更加容易。
要安装和使用 vcpkg,请使用以下命令:
git clone https://github.com/Microsoft/vcpkg
cd vcpkg
bootstrap-vcpkg.bat
vcpkg integrate install
最后一个命令是可选的,但建议 User-wide 集成。
然后安装 OpenSsl,尝试以下操作:
vcpkg search ssl
vcpkg install openssl-windows --triplet x64-windows
您的选项可能因平台具体情况而异。
重新启动 Visual Studio,您应该可以开始了。
已使用 Visual Studio 社区 2019 进行测试。
参考文献: