Skip to content
[dk]

~/blog/how-to-use-apache-thrift-setup-on-visual-cpp.md

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

この記事は 14 年以上前に書かれたものです。内容が古くなっている可能性があります。

:TOC
  1. 1. thrift compiler のビルド
  2. 1.1 MinGW のインストール
  3. 1.2 pkg-config のインストール
  4. 2. libevent のビルド(オプション:Nonblocking Server を使いたい場合)
  5. 3. libthrift のビルド

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

$ related --same-tags

cd .. 記事一覧へ戻る