質問: { *stdin, *stdout, *stderr }; extern "C" FILE * __cdecl __iob_func(void) { return _iob; } int main() { try { asio::io_service io_service; ip::tcp::socket sock(io_service); // 正しくビルドできるか確認するだけのコードです。 boost::asio::ssl::context context(io_service, boost::asio::ssl::context::tlsv12_client); boost::asio::ssl::stream< boost::asio::ip::tcp::socket > ssl_stream(io_service, context); ip::tcp::resolver resolver(io_service); ip::tcp::resolver::query query("sourceforge.net", "https"); ip::tcp::endpoint endpoint(*resolver.resolve(query)); sock.connect(endpoint); asio::streambuf request; ostream request_ostream(&request); request_ostream << "GET /\r\nHost:sourceforge.net\r\n\r\n"; asio::write(sock, request); asio::streambuf buffer; boost::system::error_code error; asio::read(sock, buffer, asio::transfer_all(), error); if (error && error != asio::error::eof) { std::cout << "receive failed: " << error.message() << std::endl; } else { cout << &buffer << endl; } }catch (exception& e){ cout << e.what(); } return 0; } ``` これをVisualStudio2015でビルドすると、リンクエラーが発生します。 ``` 1>libeay32.lib(cryptlib.obj) : error LNK2001: 外部シンボル "__vsnprintf" は未解決です。 1>libeay32.lib(pqueue.obj) : error LNK2001: 外部シンボル "_printf" は未解決です。 1>libeay32.lib(v3_utl.obj) : error LNK2001: 外部シンボル "_sscanf" は未解決です。 1>libeay32.lib(dso_win32.obj) : error LNK2001: 外部シンボル "_sprintf" は未解決です。 ``` VS2015のビルドオプションか、OpenSSL側のビルド方法で解決できればいいのですが、 解決方法を教えていただければと。 補足情報ですが、BoostとOpenSSLは下記の方法でビルドしています。 ・boost 32bit版 ``` b2 toolset=msvc threading=multi variant=debug,release link=static runtime-link=static address-model=32 --stagedir=stage/x86 -j 8 ``` ・boost 64bit版 ``` b2 toolset=msvc threading=multi variant=debug,release link=static runtime-link=static address-model=64 --stagedir=stage/x64 -j 8 ``` ・OpenSSL 32bit版 ``` cd c:\openssl\openssl-1.0.2g perl Configure no-asm --prefix=..\x86 VC-WIN32 ms\do_ms.bat nmake -f ms\nt.mak install ``` ・OpenSSL 64bit版 ``` cd c:\openssl\openssl-1.0.2g perl Configure no-asm --prefix=..\x64 VC-WIN64A ms\do_win64a.bat nmake -f ms\nt.mak install ``` 回答よろしくお願いします。
回答: 外しているかもしれませんが、OpenSSLのビルドオプションがスタティックリンクになっていないのではないでしょうか。 また、OpenSSLをビルドした環境と、現在開発をされている環境でコンパイラのバージョンが違うということはないでしょうか? 上記のような条件でバージョンが違うライブラリを参照した場合、未解決エラーが出ることがあります。 一度OpenSSLを現在の開発環境でビルドしなおしてみてはいかがでしょう。