Transactd ビルドガイド for Windows

1. コンパイラの準備

Transactd Plugin および Transactd クライアントは、Windows上のVisual Studio (32bit/64bit)でビルドできます。
Transactd Pluginは、MySQLとともにビルドするので、MySQLの要求するコンパイラに 合わせてビルドします。MySQL 5.7は Visual Studio Express 2013、それ以外のバージョンの MySQL/MariaDBは Visual Studio Express 2010を使用してビルドします。

(クライアントはEmbarcaderoのコンパイラーC++ Builder XEシリーズでもビルドできます。 クライアントのみをビルドの項を参照してください。)

MySQL 5.7は以下のコンパイラをダウンロードしてインストールします。

MySQL 5.5/5.6、MariaDB 5.5/10.0は以下のコンパイラとSDKをダウンロードしてインストールします。

Visual Studioコマンドプロンプトの起動方法

後述する手順の中で、Visual Studioコマンドプロンプトを開くことがあります。
MySQL 5.5/5.6、MariaDB 5.5/10.0は以下の手順でVisual Studioコマンドプロンプトを 開きます。

MySQL 5.7は以下の手順でVisual Studioコマンドプロンプトを開きます。

2. CMakeのダウンロードとインストール

CMake ダウンロードページか らWindows (Win32 Installer) cmake-2.8.12.2-win32-x86.exe をダウンロードし実行します。

途中、「Add CMake to the system PATH for all(or current) users」を選択し、 cmakeの実行ファイルにパスが通るようにします。

3. Boost C++ Libraries のダウンロードとインストール

BoostProのダウンロードページが閉鎖されたため、ビルド済みバイナリをダウンロードするこ とはできなくなりました。boostはソースからビルドします。

ソースからのビルド

Boostのダウンロードページからソースコードを ダウンロードし、解凍します。ここでは、以下のフォルダに保存したものとします。

C:\boost\boost_1_59_0

Visual Studioコマンドプロンプトを起動します。以下のコマンドを実行し、Boostのビル ドを行います。

cd C:\boost\boost_1_59_0
bootstrap.bat

@REM Visula studio 2010 64bitの場合
bjam.exe toolset=msvc-10.0 threading=multi address-model=64 architecture=x86 ^
  --with-chrono --with-filesystem --with-system --with-thread --with-timer ^
  --with-serialization --with-program_options --with-date_time --with-regex ^
  variant=debug,release link=static runtime-link=static,shared

@REM Visula studio 2010 32bitの場合
bjam.exe toolset=msvc-10.0 threading=multi architecture=x86 ^
  --with-chrono --with-filesystem --with-system --with-thread --with-timer ^
  --with-serialization --with-program_options --with-date_time --with-regex ^
  variant=debug,release link=static runtime-link=static,shared

@REM Visula studio 2013 64bitの場合
bjam.exe toolset=msvc-12.0 threading=multi address-model=64 architecture=x86 ^
  --with-chrono --with-filesystem --with-system --with-thread --with-timer ^
  --with-serialization --with-program_options --with-date_time --with-regex ^
  variant=debug,release link=static runtime-link=static,shared

@REM Visula studio 2013 32bitの場合
bjam.exe toolset=msvc-12.0 threading=multi architecture=x86 ^
  --with-chrono --with-filesystem --with-system --with-thread --with-timer ^
  --with-serialization --with-program_options --with-date_time --with-regex ^
  variant=debug,release link=static runtime-link=static,shared

4. サーバープラグインとクライアントの両方をビルド

クライアントのみをビルドしたい場合はこのステップを飛ばしてください。

4-1 MySQLソースコードのダウンロード

MySQL Community Serverのダウンロードページ からソースコードをダウンロードします。 「Select Platform」のプルダウンから「Source Code」を選択し、Windows ZIP形式の ファイルをダウンロードします。

ダウンロードした圧縮ファイルを解凍します。ここでは、以下のフォルダに保存したも のとします。

C:\Users\Public\Documents\mysql-5.6.25

4-2 Transactd Pluginソースコードのダウンロード

Transactd Pluginのダウンロードページ からソースコードをダウンロードします。 ソースを展開するフォルダ transactd をMySQLのソースツリー内のpluginフォルダに作成 します。

md C:\Users\Public\Documents\mysql-5.6.25\plugin\transactd

ダウンロードしたソースコードを、上記で作成したtransactdフォルダに展開します。 ここでは、以下のようなフォルダ構造になります。

C:\Users\Public\Documents\mysql-5.6.25\plugin\transactd

4-3 MySQLソースコードの修正

4-3.1 パッチの適用

Transactd Pluginソースコードのpatchディレクトリにmysqlのソースコードを修正する ためのパッチが含まれています。そのパッチをmysqlのソースディレクトリにコピー します。(パッチはmysql/mariadbのバージョンごとに異なる名前になっています。 パッチ名のバージョンの部分は合ったものに変更してください。)

cd C:\Users\Public\Documents\mysql-5.6.25
copy plugin\transactd\patch\transactd-win-mysql-5.6.25.patch *

patchコマンドを使用できる環境(Cygwin、Git Bashなど)があるならば、以下の コマンドでパッチを適用します。

cd C:\Users\Public\Documents\mysql-5.6.25
patch -p0 -i transactd-win-mysql-5.6.25.patch

patchコマンドがない場合、宮坂 賢 氏のGNU patch 2.5.4 (Win32 版)をダウンロードし 使用します。 ここでは、以下のフォルダに保存したものとします。

C:\Program Files (x86)\patc254w

以下のコマンドでパッチを適用します。

cd C:\Users\Public\Documents\mysql-5.6.25
"C:\Program Files (x86)\patc254w\patch.exe" -p0 --binary -i transactd-win-mysql-5.6.25.patch

4-3.2 ソースコードのエンコーディングの修正

日本語Windows環境でビルドする場合、一部のソースコードのエンコーディングを変更する 必要があります。以下のファイルをVisual Studioから開き、[名前を付けて保存]- [上書き保存]の右の▼をクリック-[エンコード付きで保存]を選択し、 「Unicode (UTF-8 シグネチャ付き)-コードページ 65001」で上書き保存します。

4-4 CMakeの実行

Visual Studioコマンドプロンプトを起動して、以下のコマンドを実行します。

@REM Visual studio 2010 64Bitの場合 
cd C:\Users\Public\Documents\mysql-5.6.25
md x64
cd x64
cmake .. -G "Visual Studio 10 Win64" ^
   -DBOOST_ROOT="C:\boost\boost_1_59_0"

@REM Visual studio 2013 64Bitの場合
cd C:\Users\Public\Documents\mysql-5.7.8
md x64
cd x64
cmake .. -G "Visual Studio 12 Win64" ^
   -DWITH_BOOST="C:\boost\boost_1_59_0" ^
   -DBOOST_ROOT="C:\boost\boost_1_59_0"

4-5 ビルド

CMakeが完了すると、以下のソリューションファイルが生成されています。

C:\Users\Public\Documents\mysql-5.6.25\bldVC100x64\MySQL.sln

MySQL.slnをVisual Studioで開きます。メニューの[ビルド]-[構成マネージャー]から構 成を「Release」に変更し、[ビルド]-[ソリューションのビルド]をクリックしま す。

バイナリは以下のフォルダに出力されます。

C:\Users\Public\Documents\mysql-5.6.25\bldVC100x64\sql\lib\plugin
C:\Users\Public\Documents\mysql-5.6.25\bldVC100x64\plugin\transactd\bin
C:\Users\Public\Documents\mysql-5.6.25\bldVC100x64\plugin\transactd\lib

5. クライアントのみをビルド

WindowsでのクライアントのビルドについてはWindows上でのクライアントのビルドについてもご覧ください。

5-1 Transactd Pluginソースコードのダウンロード

Transactd Pluginのダウンロードページ からソースコードをダウンロードします。

ここでは、以下のフォルダに展開したとします。

C:\Users\Public\Documents\transactd

(EmbarcaderoのC++BuilderXEシリーズの場合は5-4 C++BuilderXEシリーズでのビルドに進んでください。)

5-2 CMakeの実行

Visual Studioコマンドプロンプトを起動して、以下のコマンドを実行します。

@REM Visual studio 2010 64Bitの場合 
cd C:\Users\Public\Documents\transactd
md x64
cd x64
cmake .. -G "Visual Studio 10 Win64" ^
  -DBOOST_ROOT="C:\boost\boost_1_59_0"  ^
  -DWITH_TRANSACTD_SERVER=OFF -DWITH_TRANSACTD_CLIENTS=ON

@REM Visual studio 2013 64Bitの場合 
cd C:\Users\Public\Documents\transactd
md x64
cd x64
cmake .. -G "Visual Studio 12 Win64" ^
  -DBOOST_ROOT="C:\boost\boost_1_59_0" ^
  -DWITH_TRANSACTD_SERVER=OFF -DWITH_TRANSACTD_CLIENTS=ON

5-3 ビルド

CMakeが完了すると、以下のソリューションファイルが生成されています。

C:\Users\Public\Documents\transactd\bldVC100x64\TransactdClinet.sln

tdcl.slnをVisual Studioで開きます。メニューの[ビルド]-[構成マネージャー]から構 成を「Release」に変更し、[ビルド]-[ソリューションのビルド]をクリックしま す。

バイナリは以下のフォルダに出力されます。

C:\Users\Public\Documents\transactd\bldVC100x64\bin
C:\Users\Public\Documents\transactd\bldVC100x64\lib

5-4 C++BuilderXEシリーズでのビルド

EmbarcaderoのC++BuilderXEシリーズの場合は

C:\Users\Public\Documents\Build\TransactdClient_bcb.groupproj

にてXE以降のコンパイラーでコンパイルできます。

コンパイルにはコンパイラー付属のboostライブラリがインストールされている必要が あります。また、C++ Builderの[ツール]-[オプション]-[環境オプション]-[C++ オプション] -[パスとディレクトリ]の[システムインクルードパス]に

32Bitの場合 $(CG_BOOST_ROOT)
64Bitの場合 $(CG_64_BOOST_ROOT)

を追加します。 ビルド構成は、Unicode版/Ansi版 Release/Debug 32Bit/64Bit があります。 出力は、bin libフォルダに生成されます。64Bitの場合は常に動的RTLとリンクが必要です。

以下はバージョンごとの補足事項です。

32Bit(すべてのXEバージョン)の場合、boost_program_optionsがコンパイルされていないため、

build\libboost_program_options-bcb1_39\libboost_program_options-bcb-mt-1_39.cbproj

にて事前にlibboost_program_options-bcb-mt-1_39.libを生成してください。 コンパイルの前に、下記のboostのソースの修正が必要です。

ファイル:$(CG_BOOST_ROOT)\boost_1_39\libs\program_options\src\variables_map.cpp
71行目  :v = variable_value();  -->  variable_value vr;v = vr;
115行目 :m[key] = variable_value(def, true);  -->  variable_value vr(def, true);m[key] = vr;

XE2の場合、boost_serializationがコンパイルされていないため、

build\libboost_serialization-bcb-1_39\libboost_boost_serialization-bcb-mt-1_39.cbproj

にて事前にlibboost_serialization-bcb-mt-1_39.libを生成してください。

XE4 64Bitの場合、コンパイラバージョンがXE3と同じであるため、tdclcppを使用する アプリケーションの自動リンクでtdclcpp_bc170_64x.libを探そうとします。しかしXE4で 生成されるdllはtdclcpp_bc180_64x.dllのため、libが見つからずリンクエラーが発生します。 XE4 64Bitでtdclcppとtdclstmtをコンパイルした際には、libのファイル名の180部分を170に リネームしtdclcpp_bc180_64x_xx.libtdclstmt_bc180_64x_xx.libにしてください。

XE6 64Bitの場合、boost_threadのコンパイルが通らないためboostのソースを修正します。

ファイル:$(CG_BOOST_ROOT)\boost_1_50\boost\asio\detail\impl\win_thread.ipp
52行目:  ::QueueUserAPC(apc_function, thread_, 0); --> ::QueueUserAPC((PAPCFUNC)apc_function, thread_, 0);