最近、といっても数日前からboostを触り始めた。
主に、Let's boostを参考にしています。
まず、
- ダウンロードページから boost_1_39_0.7z と boost-jam-3.1.17-1-ntx86.zip をダウンロード&解凍。
- bjam.exe は boost と同じフォルダに入れました。
- Let's boostのページのページに乗っ取ってインストールフォルダを決めパスをINCLUDEとLIBに設定。
- 「Visual Studio 2008 コマンド プロンプト」を起動しインストールフォルダ移動。
bjam --toolset=msvc link=static,shared release debug stage
と入力してライブラリをビルド。
とここまで来て、letsboost::asioのサンプルを入力してコンパイルだーと「Visual Studio 2008 コマンド プロンプト」から
cl /EHsc asio_sample.cpp
と入力すると...
LINK : fatal error LNK1104: ファイル 'libboost_system-vc90-mt-s-1_39.lib' を開くことができません
_| ̄|○
ライブラリの設定を見直しやり直してもだめ...
ライブラリフォルダを見ると確かに無い...???
色々検索してみると今回のビルド方法の場合はどうもbjamのオプションがたりないようなので、
bjam --toolset=msvc runtime-link=static link=static release debug stage
と runtime-link=static
を追加すると libboost_system-vc90-mt-s-1_39.lib が生成されリンクできた。(*1)
exeが出来た、さー実行...??あれ?
何も結果が出てこない...
コンパイルオプション変えてもだめ
でそういえばサンプルが入っていたなーと思い出し、boost\libs\asio\example\http\client の sync_client.cpp と async_client.cpp をコピーしビルド。
中身見ながら結構面倒なことやってるなーと思いつつ実行!
Exception: 指定されたクラスが見つかりません。
おや?
クラスってなんだーと思い最終的にIDEでステップ実行。
tcp::resolver::iterator endpoint_iterator = resolver.resolve(query);
の行で例外が発生しているみたい。
たどっていくとgetaddrinfo()
から10109が返ってくる。10109ってなんだろーって検索すると WSATYPE_NOT_FOUND らしい。
検索で見つかったgetaddrinfoをみながら、うーん WSATYPE_NOT_FOUND かーと考えてみると、サービス名に"http"って指定していたなーと思い、"80"にして実行してみるとうまく動いた。
asio_sample.cpp の方も "http" から "80" に変えるとこちらも動いた...
で結局、getaddrinfo()
に与える引数でなぜか自分の環境では、"http"がだめみたいってことだった。
なんか設定があるのだろうか???
でやっとスタートラインに立てたので今回は終了
*1 : IDEの場合のデフォルトは”マルチスレッド デバッグ DLL”で、libboost_system-vc90-mt-gd-1_39.libが必要とされるので、Let's boostの方法でOKです。