Asio对OpenSSL的依赖

Lig*_*ger 3 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?

好吧,这不是我想提出的重点。问题是,在不要求客户端安装OpenSSL的情况下,还有其他替代方案可以使用Asio SSL吗?换句话说,如何在单个可执行文件中将OpenSSL与应用程序静态绑定?

ken*_*nba 5

boost::asio使用OpenSSLSSL插座:如果您有:

#include <boost/asio/ssl.hpp>
Run Code Online (Sandbox Code Playgroud)

在你的代码,那么你就需要构建OpenSSLboost

要构建OpenSSL

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

Windows,Visual Studio:

LIBS += -llibeay32
LIBS += -llibssleay32
Run Code Online (Sandbox Code Playgroud)

Windows,MinGW:

LIBS += -lssl
LIBS += -lcrypto
Run Code Online (Sandbox Code Playgroud)

Linux,GCC:

LIBS += -lssl
LIBS += -lcrypto
LIBS += -ldl
Run Code Online (Sandbox Code Playgroud)

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


xax*_*xon 3

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

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

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

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

但是,为了链接程序,您必须拥有可供编译器/链接器使用的头文件和静态库。