- Published on
Apache Thrift を使う 2 - Visual C++ での環境構築
- Authors
- Name
- Daisuke Kobayashi
- https://twitter.com
今回は 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 フォルダに移動し
export CXXFLAGS=”-DPTHREAD_MUTEX_RECURSIVE_NP=PTHREAD_MUTEX_RECURSIVE” cd compiler/cpp $ make
ここまで問題なくできていれば,フォルダ直下に thrift.exe が作成されます.
2. libevent のビルド(オプション:Nonblocking Server を使いたい場合)
NonblockingServer を使いたい場合には libevent が必要です.オフィシャルページから安定版をダウンロードしてきます.解凍後、Visual Studio 付属のコマンドプロンプトを開きます.
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 が作成されます.これでライブラリのビルドは完了です.次回は実際の使用法について記述します.