C++幼女先輩

プログラミング成分多め

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が使用可能になった