Asio对OpenSSL的依赖

时间:2016-10-06 06:04:15

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

在使用Asio实现SSL握手代码时,项目不会构建并抛出错误

  

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与我的应用程序静态绑定?

2 个答案:

答案 0 :(得分:2)

boost::asioOpenSSL用于SSL套接字:如果您有:

#include <boost/asio/ssl.hpp>

在您的代码中,您需要使用OpenSSL以及boost进行构建。

使用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

注意:您可能与图书馆订单存在链接问题。我建议在OpenSSL库之后加入boost库; BTW boost::asio需要libboost_system

答案 1 :(得分:1)

  

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

是。您可以使用{{1}}选项构建openssl,它只会构建一个静态库:

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

然后只需将静态存档放在链接命令行上,它就会静态链接 - 但是你分发它的人却没有。

但是,为了链接程序,您必须为编译器/链接器提供头文件和静态库。