Apache Thrift を使う 2 - Visual C++ での環境構築
今回はThrift のコンパイラとC++ライブラリのビルドについて書きます.環境はWindows XP 32bit, Visual C++ 2010 Express です.
- thrift compiler のビルド
- libevent のビルド(オプション:Nonblocking Serverを使いたい場合)
- libthrift のビルド
1. thrift compiler のビルド
オフィシャルページには現在,安定版としてコンパイラが公開されています.ただ0.80はWindows対応が完璧ではないので、最終段階で実行時にランタイムエラーとか出てすごく大変でした...
この辺の対応が0.90にかけてされているので,svn のログを見て修正箇所を組み込むだけでもいいのですが,面倒なので最新版を使いたいと思います.
※コンパイラとライブラリ間のバージョンの違いはあまり関係ないかもしれませんが,同一のバージョンで環境構築をします.
下記ページにWindow下での環境構築方法が書いてありますが,このままでは上手くいかないところが多々あります.
http://wiki.apache.org/thrift/ThriftInstallationWin32 まずはthrift compiler のビルド環境を構築します.
1.1 MinGWのインストール
コンパイラの作成にはMinGW を使います.
ここからMinGWの最新のインストーラーをダウンロードしてきてください.
ダウンロードしてきた mingw-get-inst-*.exe を実行しインストールします.選択はデフォルトのままで,インストールする環境のところだけ以下の項目にチェックを入れて下さい.
- C Compiler
- C++ Compiler
- MSYS Basic System
- MinGW Developer Toolkit
1.2 pkg-config のインストール
pkg-config が無いとconfigureに失敗します.具体的には下記のエラーが出ます.またconfigure の最初の方のメッセージで PKG_PROG_PKG_CONFIG not found みたいなメッセージが出てたらアウトです.
/configure: line 16989: syntax error near unexpected token `QT,’
./configure: line 16989: ` PKG_CHECK_MODULES(QT, QtCore >= 4.3, QtNetwork >= 4.3, have_qt=yes, have_qt=no)’
ということで,pkg-configをインストールしましょう.幸いGTKでこのへんに必要なツールが公開されています.ここの[Download] -> [Windows (32-bit)] から
- pkg-config: Tool
- GLib: Run-time
- gettext-runtime: Run-time
をダウンロードしてきます.3つのフォルダを解凍し、解凍されたフォルダをC:\MinGW フォルダにそのままコピーし上書きしてください.さらに pkg-config のソースコードからpkgのマクロを持ってくる必要があります.
上記GTKのページかこのページの中盤の[/releases]から上記でダウンロードした pkg と同一バージョンのソースをダウンロードしてきます.解凍したあと,フォルダの中にpkg.m4 というファイルがあると思います.このファイルを MinGW\share\aclocal, MinGW\share\aclocal-1.11 (一番バージョンが新しいやつ)のフォルダにコピーして下さい.
thrift の最新プロジェクトをとってきます.
$ svn co http://svn.apache.org/repos/asf/thrift/trunk/ thrift
thrift/compiler/cpp/Makefile.am をエディタで開き下記項目を編集.
CXX_FLAGS= -DMINGW -static
そしたらMsysを開き,先ほどダウンロードしたthriftフォルダに移動し
$ ./bootstrap.sh
$ export CXXFLAGS=”-DPTHREAD\_MUTEX\_RECURSIVE\_NP=PTHREAD\_MUTEX\_RECURSIVE”
$ ./configure
$ cd compiler/cpp
$ make
ここまで問題なくできていれば,フォルダ直下に thrift.exe が作成されます.
2. libevent のビルド(オプション:Nonblocking Serverを使いたい場合)
NonblockingServer を使いたい場合には libevent が必要です.オフィシャルページから安定版をダウンロードしてきます.解凍後、Visual Studio 付属のコマンドプロンプトを開きます.
$ cd /path/to/libevent
$ mv Makefile.nmake Makefile
$ nmake
- libevent.lib
- libevent_core.lib
- libevent_extras.lib
の3つのライブラリが作成されます.
あと必要なincludeファイルをまとめます.解凍フォルダ内のincludeフォルダに WIN32-Code フォルダの中身, 解凍フォルダの evdns.h, event.h, evhttp.h, evrpc.h, evutil.h をコピーして下さい.これでlibevent のライブラリが出来上がりました.
3. libthrift のビルド
thrift/lib/cpp フォルダのthrift.slnを開きます.ダブルクリックして開けないので,VCを起動後ドラッグ&ドロップしてください.警告が出ますが,無視します.開いたら,libthrift のプロジェクトのプロパティから追加のディレクトリとしてBoostのinclude&libを追加してください.ビルドするとRelease フォルダ下にlibthrift.lib が作成されます.
NonblockingServer を使う場合:
libthriftnb もビルドする必要があります.プロジェクトのプロパティから追加のディレクトリとしてBoostの include & lib, libevent のinclude & lib を追加して下さい.ビルドするとRelease フォルダ下にlibthriftnb.lib が作成されます.これでライブラリのビルドは完了です.次回は実際の使用法について記述します.