boost::asioを使った時に、OpenSSLがLinkエラーになる
過去に起きた問題
boost::asioでSSLを使うためには、OpenSSLあるいは LibreSSLをリンクする必要があります
しかし、boostとSSLライブラリのバージョンによっては相性がわるく
Undefined symbols for architecture x86_64: "_SSL_CTX_get_default_passwd_cb_userdata", referenced from: boost::asio::ssl::context::~context() in main.cpp.o "_SSL_CTX_set_options", referenced from: boost::asio::ssl::context::set_options(long, boost::system::error_code&) in main.cpp.o ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation)
のようなリンクエラーが出ます
理由は OpenSSLには 1.0系と 1.1系があり、APIの互換性がない
boost::asioは古いバージョンでは 1.0系にしか対応していないため、1.1系をインストールした際は リンクエラーになる
ちなみに libreSSLは 1.0系と互換性がある
解決法は OpenSSL1.0系をインストールすることである
ただし Boostの新しいバージョンでは 1.1系もサポートされているという噂もある
また、私の環境では OpenSSL1.1を入れたあとに OpenSSL1.0を入れたら
/usr/local/ssl/openssl にインストールされた
1.1系は /usr/local/openssl にインストールされていた
CMakeの findOpenSSLでは /usr/local/opensslを見に行ったため
sudo mv -r /usr/local/ssl/* /usr/local
と、ファイルを移動させた
これでリンクが出来、boost::asioから SSLが使用可能になった