Published on

Apache Thrift を使う 2 - Visual C++ での環境構築

Authors

今回は Thrift のコンパイラと C++ライブラリのビルドについて書きます.環境は Windows XP 32bit, Visual C++ 2010 Express です.

  1. thrift compiler のビルド
  2. libevent のビルド(オプション:Nonblocking Server を使いたい場合)
  3. 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./bootstrap.sh export CXXFLAGS=”-DPTHREAD_MUTEX_RECURSIVE_NP=PTHREAD_MUTEX_RECURSIVE” ./configure./configure cd compiler/cpp $ make

ここまで問題なくできていれば,フォルダ直下に thrift.exe が作成されます.

2. libevent のビルド(オプション:Nonblocking Server を使いたい場合)

NonblockingServer を使いたい場合には libevent が必要です.オフィシャルページから安定版をダウンロードしてきます.解凍後、Visual Studio 付属のコマンドプロンプトを開きます.

cd/path/to/libeventcd /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 が作成されます.これでライブラリのビルドは完了です.次回は実際の使用法について記述します.