【问题标题】:Asio dependency on OpenSSLAsio 对 OpenSSL 的依赖
【发布时间】:2017-02-14 18:20:31
【问题描述】:

在使用 Asio 实现 SSL Handshake 代码时,项目没有构建并抛出错误

C:\Eclipse\Boost\boost_1_62_0/boost/asio/ssl/detail/openssl_types.hpp:19:26:致命错误:openssl/conf.h:没有这样的文件或目录

那么是不是说对于使用 Asio 的 SSL,我们需要安装 OpenSSL 呢?

这不是我想提出的重点。问题是,是否有任何其他替代方法可以使用 Asio SSL 而无需要求客户端安装 OpenSSL,或者换句话说,如何在单个可执行文件中将 OpenSSL 与我的应用程序静态绑定?

【问题讨论】:

  • 是的,你必须安装 OpenSSL 才能提升。你的意思是你想使用OpenSSL + Boost而不安装它(OpenSSL)?
  • 您需要提供更多信息,例如您如何配置和构建 Boost,以及您如何构建程序。另请参阅Boost Asio and OpenSSL 1.1.0VS2015 build openssl with boost asioIssue 12238: Boost fails to compile using OpenSSL 1.1.0
  • 正确,我想制作一个可执行文件,允许客户端进行通信,而无需在客户端@Blacktempel 上安装 OpenSSL
  • 是的 Boost 尚未更新以与 OpenSSL 1.1.0 一起使用,这不是问题我将使用旧版本的 OpenSSL 1.0.2,谢谢 :) @jww

标签: c++ ssl boost openssl boost-asio


【解决方案1】:

boost::asio 使用 OpenSSLfor SSL 套接字:如果你有:

#include <boost/asio/ssl.hpp>

在您的代码中,您需要使用OpenSSLboost 进行构建。

使用OpenSSL 构建:

  • 在项目级别定义宏BOOST_NETWORK_ENABLE_HTTPS
  • OpenSSL 包含目录添加到您的包含路径;
  • OpenSSL 库目录添加到您的库路径,例如-L$${OPENSSL_ROOT}/lib;
  • 为您的编译器添加适当的加密库,例如:

Windows、Visual Studio:

LIBS += -llibeay32
LIBS += -llibssleay32

Windows、MinGW:

LIBS += -lssl
LIBS += -lcrypto

Linux、GCC:

LIBS += -lssl
LIBS += -lcrypto
LIBS += -ldl

注意:您可能在图书馆订单方面遇到链接问题。我建议在boost 库之后包含OpenSSL 库;顺便说一句,boost::asio 需要 libboost_system

【讨论】:

  • 对于 windows 也与 crypt32.lib 链接
【解决方案2】:

我可以将 OpenSSL 与我的应用程序静态绑定在一个可执行文件中吗?

是的。您可以使用 no-shared 选项构建 openssl,它只会构建一个静态库:

https://wiki.openssl.org/index.php/Compilation_and_Installation

然后只需将静态存档放在您的链接命令行上,它将被静态链接 - 但您分发它的人不会。

但是,要链接程序,您必须让编译器/链接器可以使用头文件和静态库。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-23
    • 1970-01-01
    • 2019-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多