VisualStudio 2015でのOpenSSL(libeay32.lib)リンクエラー
現在、OpenSSL(1.0.2g)とBoost(1.60)を、TLS1.2でHTTPS通信をするプログラムを作成しています。
開発環境は、Windows10上で動作するVisualStudio2015です。
ビルドは32bit(x86)のリリースモードで行います。
ライブラリとのリンクはすべて静的リンクです。(組み込み先に制約があるため)
ランタイムライブラリは、「マルチスレッド (/MT)」にしています。
以下のようなプログラムです。
(__iob_funcが未定義と言われるためとりあえず__iob_funcを実装してありますが、これは正攻法なのでしょうか)
#include<iostream>
#include<boost/asio.hpp>
#include<boost/asio/ssl.hpp>
namespace asio = boost::asio;
namespace ip = asio::ip;
using namespace std;
// __iob_func未定義エラー回避のため。
FILE _iob[] = { *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
回答よろしくお願いします。