在使用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与我的应用程序静态绑定?
答案 0 :(得分:2)
boost::asio
将OpenSSL
用于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
然后只需将静态存档放在链接命令行上,它就会静态链接 - 但是你分发它的人却没有。
但是,为了链接程序,您必须为编译器/链接器提供头文件和静态库。