c – Boost Asio和OpenSSL 1.1.0

c – Boost Asio和OpenSSL 1.1.0,第1张

概述我目前正在研究一个C IMAP库,以便我可以改进一些公认的生锈C技能.我想让这个库尽可能便携,以便我可以在OS上使用它,如果我感到疯狂,甚至可能在移动设备上.为此,我做了一些研究并决定使用Boost的Asio库. 我能够让Boost独立构建并运行在我的项目中.我的活动为google.com做了一个简单的HTTP GET.不幸的是,我需要能够使用TLS进行通信,并且我遇到了试图使用Asio的SSL功 我目前正在研究一个C IMAP库,以便我可以改进一些公认的生锈C技能.我想让这个库尽可能便携,以便我可以在OS上使用它,如果我感到疯狂,甚至可能在移动设备上.为此,我做了一些研究并决定使用Boost的Asio库.

我能够让Boost独立构建并运行在我的项目中.我的活动为Google.com做了一个简单的http GET.不幸的是,我需要能够使用TLS进行通信,并且我遇到了试图使用Asio的SSL功能的问题.

我使用默认设置从源代码构建了Boost和OpenSSL(所以一切都在/usr/local中).我也在使用CMAKE来构建我的项目.下面是我的CMAKE文件:

cmake_minimum_required(VERSION 3.2)project(IMAP)set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")message(WARNING "Starting CMAKE...")set(SOURCE_fileS main.cpp)add_executable(IMAP ${SOURCE_fileS})find_package(Boost COMPONENTS system thread regex required)message(WARNING "Boost_INCLUDE_DIR: ${Boost_INCLUDE_DIR}")message(WARNING "Boost_liBRARIES: ${Boost_liBRARIES}")message(WARNING "Boost_VERSION: ${Boost_VERSION}")include_directorIEs(${Boost_INCLUDE_DIR})target_link_librarIEs(IMAP ${Boost_liBRARIES})find_package(OpenSSL required)message(WARNING "OpenSSL_VERSION: ${OPENSSL_VERSION}")message(WARNING "OpenSSL_INCLUDE_DIR: ${OPENSSL_INCLUDE_DIR}")message(WARNING "OpenSSL_liBRARIES: ${OPENSSL_liBRARIES}")include_directorIEs(${OPENSSL_INCLUDE_DIR})target_link_librarIEs(IMAP ${OPENSSL_liBRARIES})

这是我的CMAKE消息的输出:

Warning:Starting CMAKE...Warning:Boost_INCLUDE_DIR: /usr/local/includeWarning:Boost_liBRARIES: /usr/local/lib/libboost_system.dylib;/usr/local/lib/libboost_thread.dylib;/usr/local/lib/libboost_regex.dylib;/usr/local/lib/libboost_chrono.dylib;/usr/local/lib/libboost_date_time.dylib;/usr/local/lib/libboost_atomic.dylibWarning:Boost_VERSION: 106100Warning:OpenSSL_VERSION: 1.1.0Warning:OpenSSL_INCLUDE_DIR: /usr/local/includeWarning:OpenSSL_liBRARIES: /usr/local/lib/libssl.dylib;/usr/local/lib/libcrypto.dylib

当我尝试构建项目时,我收到以下一堆错误:

In file included from /path/to/my/code/JMail/IMAP/main.cpp:4:In file included from /path/to/my/code/JMail/IMAP/IMAPClIEnt.h:6:In file included from /path/to/my/code/JMail/IMAP/TLSSocket.h:9:In file included from /usr/local/include/boost/asio/ssl.hpp:19:In file included from /usr/local/include/boost/asio/ssl/context.hpp:29:In file included from /usr/local/include/boost/asio/ssl/detail/openssl_init.hpp:100:/usr/local/include/boost/asio/ssl/detail/impl/openssl_init.ipp:43:23: error: expected unqualifIEd-ID    mutexes_.resize(::CRYPTO_num_locks());                      ^/usr/local/include/openssl/crypto.h:218:41: note: expanded from macro 'CRYPTO_num_locks'#  define CRYPTO_num_locks()            (0)                                        ^In file included from /path/to/my/code/JMail/IMAP/main.cpp:4:In file included from /path/to/my/code/JMail/IMAP/IMAPClIEnt.h:6:In file included from /path/to/my/code/JMail/IMAP/TLSSocket.h:9:In file included from /usr/local/include/boost/asio/ssl.hpp:19:In file included from /usr/local/include/boost/asio/ssl/context.hpp:29:In file included from /usr/local/include/boost/asio/ssl/detail/openssl_init.hpp:100:/usr/local/include/boost/asio/ssl/detail/impl/openssl_init.ipp:46:66: error: expected unqualifIEd-ID    ::CRYPTO_set_locking_callback(&do_init::openssl_locking_func);                                                                 ^/usr/local/include/boost/asio/ssl/detail/impl/openssl_init.ipp:47:56: error: expected unqualifIEd-ID    ::CRYPTO_set_ID_callback(&do_init::openssl_ID_func);                                                       ^/usr/local/include/boost/asio/ssl/detail/impl/openssl_init.ipp:64:32: error: expected unqualifIEd-ID    ::CRYPTO_set_ID_callback(0);                               ^/usr/local/include/boost/asio/ssl/detail/impl/openssl_init.ipp:65:37: error: expected unqualifIEd-ID    ::CRYPTO_set_locking_callback(0);                                    ^/usr/local/include/boost/asio/ssl/detail/impl/openssl_init.ipp:66:7: error: expected unqualifIEd-ID    ::ERR_free_strings();      ^/usr/local/include/openssl/err.h:241:29: note: expanded from macro 'ERR_free_strings'# define ERR_free_strings() while(0) continue                            ^In file included from /path/to/my/code/JMail/IMAP/main.cpp:4:In file included from /path/to/my/code/JMail/IMAP/IMAPClIEnt.h:6:In file included from /path/to/my/code/JMail/IMAP/TLSSocket.h:9:In file included from /usr/local/include/boost/asio/ssl.hpp:19:In file included from /usr/local/include/boost/asio/ssl/context.hpp:29:In file included from /usr/local/include/boost/asio/ssl/detail/openssl_init.hpp:100:/usr/local/include/boost/asio/ssl/detail/impl/openssl_init.ipp:68:7: warning: 'ERR_remove_thread_state' is deprecated [-Wdeprecated-declarations]    ::ERR_remove_thread_state(NulL);      ^/usr/local/include/openssl/err.h:244:25: note: 'ERR_remove_thread_state' has been explicitly marked deprecated hereDEPRECATEDIN_1_1_0(voID ERR_remove_thread_state(voID *))                        ^In file included from /path/to/my/code/JMail/IMAP/main.cpp:4:In file included from /path/to/my/code/JMail/IMAP/IMAPClIEnt.h:6:In file included from /path/to/my/code/JMail/IMAP/TLSSocket.h:9:In file included from /usr/local/include/boost/asio/ssl.hpp:19:In file included from /usr/local/include/boost/asio/ssl/context.hpp:29:In file included from /usr/local/include/boost/asio/ssl/detail/openssl_init.hpp:100:/usr/local/include/boost/asio/ssl/detail/impl/openssl_init.ipp:72:7: error: expected unqualifIEd-ID    ::EVP_cleanup();      ^/usr/local/include/openssl/evp.h:865:25: note: expanded from macro 'EVP_cleanup'#  define EVP_cleanup() while(0) continue                        ^In file included from /path/to/my/code/JMail/IMAP/main.cpp:4:In file included from /path/to/my/code/JMail/IMAP/IMAPClIEnt.h:6:In file included from /path/to/my/code/JMail/IMAP/TLSSocket.h:9:In file included from /usr/local/include/boost/asio/ssl.hpp:19:In file included from /usr/local/include/boost/asio/ssl/context.hpp:29:In file included from /usr/local/include/boost/asio/ssl/detail/openssl_init.hpp:100:/usr/local/include/boost/asio/ssl/detail/impl/openssl_init.ipp:73:7: error: expected unqualifIEd-ID    ::CRYPTO_cleanup_all_ex_data();      ^/usr/local/include/openssl/crypto.h:206:39: note: expanded from macro 'CRYPTO_cleanup_all_ex_data'# define CRYPTO_cleanup_all_ex_data() while(0) continue                                      ^In file included from /path/to/my/code/JMail/IMAP/main.cpp:4:In file included from /path/to/my/code/JMail/IMAP/IMAPClIEnt.h:6:In file included from /path/to/my/code/JMail/IMAP/TLSSocket.h:9:In file included from /usr/local/include/boost/asio/ssl.hpp:19:In file included from /usr/local/include/boost/asio/ssl/context.hpp:29:In file included from /usr/local/include/boost/asio/ssl/detail/openssl_init.hpp:100:/usr/local/include/boost/asio/ssl/detail/impl/openssl_init.ipp:76:7: error: expected unqualifIEd-ID    ::ENGINE_cleanup();      ^/usr/local/include/openssl/engine.h:508:27: note: expanded from macro 'ENGINE_cleanup'# define ENGINE_cleanup() while(0) continue                          ^In file included from /path/to/my/code/JMail/IMAP/main.cpp:4:In file included from /path/to/my/code/JMail/IMAP/IMAPClIEnt.h:6:In file included from /path/to/my/code/JMail/IMAP/TLSSocket.h:9:In file included from /usr/local/include/boost/asio/ssl.hpp:19:In file included from /usr/local/include/boost/asio/ssl/context.hpp:29:In file included from /usr/local/include/boost/asio/ssl/detail/openssl_init.hpp:100:/usr/local/include/boost/asio/ssl/detail/impl/openssl_init.ipp:106:16: error: use of undeclared IDentifIEr 'CRYPTO_LOCK'    if (mode & CRYPTO_LOCK)               ^In file included from /path/to/my/code/JMail/IMAP/main.cpp:4:In file included from /path/to/my/code/JMail/IMAP/IMAPClIEnt.h:6:In file included from /path/to/my/code/JMail/IMAP/TLSSocket.h:9:In file included from /usr/local/include/boost/asio/ssl.hpp:19:In file included from /usr/local/include/boost/asio/ssl/context.hpp:786:/usr/local/include/boost/asio/ssl/impl/context.ipp:83:31: error: no member named 'SSLv2_method' in the global namespace    handle_ = ::SSL_CTX_new(::SSLv2_method());                            ~~^/usr/local/include/boost/asio/ssl/impl/context.ipp:86:31: error: no member named 'SSLv2_clIEnt_method' in the global namespace    handle_ = ::SSL_CTX_new(::SSLv2_clIEnt_method());                            ~~^/usr/local/include/boost/asio/ssl/impl/context.ipp:89:31: error: no member named 'SSLv2_server_method' in the global namespace    handle_ = ::SSL_CTX_new(::SSLv2_server_method());                            ~~^/usr/local/include/boost/asio/ssl/impl/context.ipp:111:31: warning: 'TLSv1_method' is deprecated [-Wdeprecated-declarations]    handle_ = ::SSL_CTX_new(::TLSv1_method());                              ^/usr/local/include/openssl/ssl.h:1556:45: note: 'TLSv1_method' has been explicitly marked deprecated hereDEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_method(voID)) /* TLSv1.0 */                                            ^In file included from /path/to/my/code/JMail/IMAP/main.cpp:4:In file included from /path/to/my/code/JMail/IMAP/IMAPClIEnt.h:6:In file included from /path/to/my/code/JMail/IMAP/TLSSocket.h:9:In file included from /usr/local/include/boost/asio/ssl.hpp:19:In file included from /usr/local/include/boost/asio/ssl/context.hpp:786:/usr/local/include/boost/asio/ssl/impl/context.ipp:114:31: warning: 'TLSv1_clIEnt_method' is deprecated [-Wdeprecated-declarations]    handle_ = ::SSL_CTX_new(::TLSv1_clIEnt_method());                              ^/usr/local/include/openssl/ssl.h:1558:45: note: 'TLSv1_clIEnt_method' has been explicitly marked deprecated hereDEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_clIEnt_method(voID)) /* TLSv1.0 */                                            ^In file included from /path/to/my/code/JMail/IMAP/main.cpp:4:In file included from /path/to/my/code/JMail/IMAP/IMAPClIEnt.h:6:In file included from /path/to/my/code/JMail/IMAP/TLSSocket.h:9:In file included from /usr/local/include/boost/asio/ssl.hpp:19:In file included from /usr/local/include/boost/asio/ssl/context.hpp:786:/usr/local/include/boost/asio/ssl/impl/context.ipp:117:31: warning: 'TLSv1_server_method' is deprecated [-Wdeprecated-declarations]    handle_ = ::SSL_CTX_new(::TLSv1_server_method());                              ^/usr/local/include/openssl/ssl.h:1557:45: note: 'TLSv1_server_method' has been explicitly marked deprecated hereDEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_server_method(voID)) /* TLSv1.0 */                                            ^In file included from /path/to/my/code/JMail/IMAP/main.cpp:4:In file included from /path/to/my/code/JMail/IMAP/IMAPClIEnt.h:6:In file included from /path/to/my/code/JMail/IMAP/TLSSocket.h:9:In file included from /usr/local/include/boost/asio/ssl.hpp:19:In file included from /usr/local/include/boost/asio/ssl/context.hpp:786:/usr/local/include/boost/asio/ssl/impl/context.ipp:130:31: warning: 'TLSv1_1_method' is deprecated [-Wdeprecated-declarations]    handle_ = ::SSL_CTX_new(::TLSv1_1_method());                              ^/usr/local/include/openssl/ssl.h:1562:45: note: 'TLSv1_1_method' has been explicitly marked deprecated hereDEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_1_method(voID)) /* TLSv1.1 */                                            ^In file included from /path/to/my/code/JMail/IMAP/main.cpp:4:In file included from /path/to/my/code/JMail/IMAP/IMAPClIEnt.h:6:In file included from /path/to/my/code/JMail/IMAP/TLSSocket.h:9:In file included from /usr/local/include/boost/asio/ssl.hpp:19:In file included from /usr/local/include/boost/asio/ssl/context.hpp:786:/usr/local/include/boost/asio/ssl/impl/context.ipp:133:31: warning: 'TLSv1_1_clIEnt_method' is deprecated [-Wdeprecated-declarations]    handle_ = ::SSL_CTX_new(::TLSv1_1_clIEnt_method());                              ^/usr/local/include/openssl/ssl.h:1564:45: note: 'TLSv1_1_clIEnt_method' has been explicitly marked deprecated hereDEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_1_clIEnt_method(voID)) /* TLSv1.1 */                                            ^In file included from /path/to/my/code/JMail/IMAP/main.cpp:4:In file included from /path/to/my/code/JMail/IMAP/IMAPClIEnt.h:6:In file included from /path/to/my/code/JMail/IMAP/TLSSocket.h:9:In file included from /usr/local/include/boost/asio/ssl.hpp:19:In file included from /usr/local/include/boost/asio/ssl/context.hpp:786:/usr/local/include/boost/asio/ssl/impl/context.ipp:136:31: warning: 'TLSv1_1_server_method' is deprecated [-Wdeprecated-declarations]    handle_ = ::SSL_CTX_new(::TLSv1_1_server_method());                              ^/usr/local/include/openssl/ssl.h:1563:45: note: 'TLSv1_1_server_method' has been explicitly marked deprecated hereDEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_1_server_method(voID)) /* TLSv1.1 */                                            ^In file included from /path/to/my/code/JMail/IMAP/main.cpp:4:In file included from /path/to/my/code/JMail/IMAP/IMAPClIEnt.h:6:In file included from /path/to/my/code/JMail/IMAP/TLSSocket.h:9:In file included from /usr/local/include/boost/asio/ssl.hpp:19:In file included from /usr/local/include/boost/asio/ssl/context.hpp:786:/usr/local/include/boost/asio/ssl/impl/context.ipp:148:31: warning: 'TLSv1_2_method' is deprecated [-Wdeprecated-declarations]    handle_ = ::SSL_CTX_new(::TLSv1_2_method());                              ^/usr/local/include/openssl/ssl.h:1568:45: note: 'TLSv1_2_method' has been explicitly marked deprecated hereDEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_2_method(voID)) /* TLSv1.2 */                                            ^In file included from /path/to/my/code/JMail/IMAP/main.cpp:4:In file included from /path/to/my/code/JMail/IMAP/IMAPClIEnt.h:6:In file included from /path/to/my/code/JMail/IMAP/TLSSocket.h:9:In file included from /usr/local/include/boost/asio/ssl.hpp:19:In file included from /usr/local/include/boost/asio/ssl/context.hpp:786:/usr/local/include/boost/asio/ssl/impl/context.ipp:151:31: warning: 'TLSv1_2_clIEnt_method' is deprecated [-Wdeprecated-declarations]    handle_ = ::SSL_CTX_new(::TLSv1_2_clIEnt_method());                              ^/usr/local/include/openssl/ssl.h:1570:45: note: 'TLSv1_2_clIEnt_method' has been explicitly marked deprecated hereDEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_2_clIEnt_method(voID)) /* TLSv1.2 */                                            ^In file included from /path/to/my/code/JMail/IMAP/main.cpp:4:In file included from /path/to/my/code/JMail/IMAP/IMAPClIEnt.h:6:In file included from /path/to/my/code/JMail/IMAP/TLSSocket.h:9:In file included from /usr/local/include/boost/asio/ssl.hpp:19:In file included from /usr/local/include/boost/asio/ssl/context.hpp:786:/usr/local/include/boost/asio/ssl/impl/context.ipp:154:31: warning: 'TLSv1_2_server_method' is deprecated [-Wdeprecated-declarations]    handle_ = ::SSL_CTX_new(::TLSv1_2_server_method());                              ^/usr/local/include/openssl/ssl.h:1569:45: note: 'TLSv1_2_server_method' has been explicitly marked deprecated hereDEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_2_server_method(voID)) /* TLSv1.2 */                                            ^In file included from /path/to/my/code/JMail/IMAP/main.cpp:4:In file included from /path/to/my/code/JMail/IMAP/IMAPClIEnt.h:6:In file included from /path/to/my/code/JMail/IMAP/TLSSocket.h:9:In file included from /usr/local/include/boost/asio/ssl.hpp:19:In file included from /usr/local/include/boost/asio/ssl/context.hpp:786:/usr/local/include/boost/asio/ssl/impl/context.ipp:208:16: error: member access into incomplete type 'SSL_CTX' (aka 'ssl_ctx_st')    if (handle_->default_passwd_callback_userdata)               ^/usr/local/include/openssl/ossl_typ.h:144:16: note: forward declaration of 'ssl_ctx_st'typedef struct ssl_ctx_st SSL_CTX;               ^In file included from /path/to/my/code/JMail/IMAP/main.cpp:4:In file included from /path/to/my/code/JMail/IMAP/IMAPClIEnt.h:6:In file included from /path/to/my/code/JMail/IMAP/TLSSocket.h:9:In file included from /usr/local/include/boost/asio/ssl.hpp:19:In file included from /usr/local/include/boost/asio/ssl/context.hpp:786:/usr/local/include/boost/asio/ssl/impl/context.ipp:212:20: error: member access into incomplete type 'SSL_CTX' (aka 'ssl_ctx_st')            handle_->default_passwd_callback_userdata);                   ^/usr/local/include/openssl/ossl_typ.h:144:16: note: forward declaration of 'ssl_ctx_st'typedef struct ssl_ctx_st SSL_CTX;               ^In file included from /path/to/my/code/JMail/IMAP/main.cpp:4:In file included from /path/to/my/code/JMail/IMAP/IMAPClIEnt.h:6:In file included from /path/to/my/code/JMail/IMAP/TLSSocket.h:9:In file included from /usr/local/include/boost/asio/ssl.hpp:19:In file included from /usr/local/include/boost/asio/ssl/context.hpp:786:/usr/local/include/boost/asio/ssl/impl/context.ipp:212:22: error: expected ')'            handle_->default_passwd_callback_userdata);                     ^/usr/local/include/boost/asio/ssl/impl/context.ipp:211:53: note: to match this '('        static_cast<detail::password_callback_base*>(                                                    ^/usr/local/include/boost/asio/ssl/impl/context.ipp:214:14: error: member access into incomplete type 'SSL_CTX' (aka 'ssl_ctx_st')      handle_->default_passwd_callback_userdata = 0;             ^/usr/local/include/openssl/ossl_typ.h:144:16: note: forward declaration of 'ssl_ctx_st'typedef struct ssl_ctx_st SSL_CTX;               ^In file included from /path/to/my/code/JMail/IMAP/main.cpp:4:In file included from /path/to/my/code/JMail/IMAP/IMAPClIEnt.h:6:In file included from /path/to/my/code/JMail/IMAP/TLSSocket.h:9:In file included from /usr/local/include/boost/asio/ssl.hpp:19:In file included from /usr/local/include/boost/asio/ssl/context.hpp:786:/usr/local/include/boost/asio/ssl/impl/context.ipp:551:18: error: member access into incomplete type 'SSL_CTX' (aka 'ssl_ctx_st')          handle_->default_passwd_callback,^/usr/local/include/openssl/ossl_typ.h:144:16: note: forward declaration of 'ssl_ctx_st'typedef struct ssl_ctx_st SSL_CTX;               ^In file included from /path/to/my/code/JMail/IMAP/main.cpp:4:In file included from /path/to/my/code/JMail/IMAP/IMAPClIEnt.h:6:In file included from /path/to/my/code/JMail/IMAP/TLSSocket.h:9:In file included from /usr/local/include/boost/asio/ssl.hpp:19:In file included from /usr/local/include/boost/asio/ssl/context.hpp:786:/usr/local/include/boost/asio/ssl/impl/context.ipp:552:18: error: member access into incomplete type 'SSL_CTX' (aka 'ssl_ctx_st')          handle_->default_passwd_callback_userdata) };                 ^/usr/local/include/openssl/ossl_typ.h:144:16: note: forward declaration of 'ssl_ctx_st'typedef struct ssl_ctx_st SSL_CTX;               ^Fatal error: too many errors emitted,stopPing Now [-ferror-limit=]10 warnings and 20 errors generated.

正在引用的TLSSocket类基本上只是Boost Asio SSL示例的包装器:

#include <boost/bind.hpp>#include <boost/asio.hpp>#include <boost/asio/ssl.hpp>voID TLSSocket::connect() {    boost::asio::io_service io_service;    boost::asio::ip::tcp::resolver resolver(io_service);    boost::asio::ip::tcp::resolver::query query(this->address,this->port);    boost::asio::ip::tcp::resolver::iterator iterator = resolver.resolve(query);    boost::asio::ssl::context ctx(boost::asio::ssl::context::tlsv1);    mSocket = new boost::asio::ssl::stream<boost::asio::ip::tcp::socket>(io_service,ctx);    mSocket->set_verify_mode(boost::asio::ssl::verify_peer);    mSocket->set_verify_callback(boost::bind(&TLSSocket::on_verify_certificate,this,_1,_2));    boost::asio::async_connect(mSocket->lowest_layer(),iterator,boost::bind(&TLSSocket::on_connect,boost::asio::placeholders::error));    io_service.run();}voID TLSSocket::disconnect() {    mSocket->lowest_layer().cancel();}TLSSocket::TLSSocket(std::string address,std::string port) {    this->address = address;    this->port = port;    mSocket = nullptr;}voID *TLSSocket::send(IMAPRequest *request) {    boost::asio::streambuf requestBuff;    std::ostream request_stream(&requestBuff);    request_stream << request->getTag() << " " << request->getCommand() << " " << request->getContent() << "\r\n";    boost::asio::write(*mSocket,requestBuff);    for (; ;) {        boost::array<char,128> buffer;        boost::system::error_code error;        size_t len = mSocket->read_some(boost::asio::buffer(buffer),error);        if (error == boost::asio::error::eof)            break;        else if (error)            throw boost::system::system_error(error);        std::cout.write(buffer.data(),len);    }}voID TLSSocket::on_connect(const boost::system::error_code& error){    if(!error) {        try {            mSocket->async_handshake(boost::asio::ssl::stream_base::handshake_type ::clIEnt,boost::bind(&TLSSocket::on_handshake,boost::asio::placeholders::error));        } catch (std::exception ex){            std::cout << "Handshaking error: " << ex.what() << "\n";        }    } else {        std::cout << "Connect error: " << error.message() << "\n";    }}voID TLSSocket::on_handshake(const boost::system::error_code& error){    if(!error){    } else {        std::cout << "Handshaking error: " << error.message() << "\n";    }}bool TLSSocket::on_verify_certificate(bool verifIEd,boost::asio::ssl::verify_context &ctx) {    char subject_name[256];    X509* cert = X509_STORE_CTX_get_current_cert(ctx.native_handle());    X509_name_oneline(X509_get_subject_name(cert),subject_name,256);    std::cout << "Verifying " << subject_name << "\n";    return verifIEd;}

在我看来它甚至没有进入编译的链接阶段,它只是试图为我的main.cpp制作.o文件.如果我在IDE中打开它抱怨的其中一个文件,IDE会给我一个语法错误突出显示,但我很难过为什么.

我把包含的顺序错了吗?我的CMAKE文件有问题吗?我是否错误地构建了OpenSSL或Boost?

任何帮助,将不胜感激.我已经在这个开关工作了几个星期,并且花了大部分时间才开始构建(C第1课,我猜:)).

解决方法 这看起来像Boost还没有更新到使用OpenSSL 1.1.0. OpenSSL 1.0.2和1.1.0之间存在许多API更改,并且它们不完全源兼容.我建议您使用1.0.2,直到Boost更新为使用新的OpenSSL版本(无论如何仍处于测试阶段). 总结

以上是内存溢出为你收集整理的c – Boost Asio和OpenSSL 1.1.0全部内容,希望文章能够帮你解决c – Boost Asio和OpenSSL 1.1.0所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1217308.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存