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

Posted Sun Jun 24 2012

今回は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 の最初の方のメッセージで PKGPROGPKG_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 が作成されます.これでライブラリのビルドは完了です.次回は実際の使用法について記述します.