はじめに
Visual Studio Express 2013 for Windows Desktopでlog4cxxのビルドにてこずったので、ビルド手順をメモしておきます。
Windows7 64bit(Sp1)とVS Express 2013 for Windows Desktopを使用して、Win32モードのlog4cxxのDLLをビルドしています。
※自分では試していませんが、ビルドエラーの原因がWin32限定のようなので、プラットフォームをx64にした場合は普通にビルドできるのかもしれません。
手順
基本的には http://qedatwork.blogspot.jp/2012/12/building-log4cxx-with-vs-2012-on.html の記事を参考にしています。
- log4cxxとaprとapr-utilのソースをDLします。
- DLしたzipを同じフォルダに展開します。
- 展開したフォルダのうち、apr-1.x.xとapr-util-1.x.xのフォルダを、それぞれapr及びapr-utilにリネームします。結果として、同じフォルダにapache-log4cxx-0.10.0、apr、apr-utilの3つのフォルダができるようにします。
- apache-log4cxx-0.10.0/configure.batを実行します
- apache-log4cxx-0.10.0/configure-aprutil.batを実行します
- 中身を見ると分かりますが、APU_HAVE_APR_ICONVフラグとAPR_HAS_LDAPフラグの無効化がこれで実行されます。参考にしたリンク先のように、いちいちapu.hwやapr_ldap.hwを開いて編集しなくてもよいです。
- apache-log4cxx-0.10.0/projects/log4cxx.dswをVS2013で開きます。
- プロジェクトファイルのコンバートを実行する必要があります。
- aprとapr-utilのプロパティを開き、[ライブラリアン]-[出力ファイル]の項目を、apr-1.lib、apr-util-1.libから、apr.lib、apr-util.libに変更してください。
- やらなくても問題なさそうですが、ビルド時の警告が一つ消せます。
- aprのプロパティを開き[構成プロパティ]-[全般]の[プラットフォームルールセット]の値を、Visual Studio 2013 -WindowsXP(v120_xp)に変更します。
- 今回のキモです。VS2013ではInterlockedIncrementやそのお仲間を埋め込み命令で処理しようとしますが、VS2013のWin32ビルドでは、そこの定義で使用している#pragma指定がうまく動かないためにエラーになるようです。
- 参考:https://groups.google.com/forum/#!topic/UniMRCP/Iybpn51UYnI
- apache-log4cxx-0.10.0/src/main/include/log4cxx/log4cxx.hを開きます。
- ヘッダ内の以下の2箇所の行を書き換えます
#if defined(_MSC_VER) && !defined(LOG4CXX_STATIC) && defined(LOG4CXX)
// ↓以下の内容に置換する
#if defined(_MSC_VER) && _MSC_VER < 1700 && !defined(LOG4CXX_STATIC) && defined(LOG4CXX)
#elif defined(_MSC_VER) && !defined(LOG4CXX_STATIC)
// ↓以下の内容に置換する
#elif defined(_MSC_VER) && _MSC_VER < 1700 && !defined(LOG4CXX_STATIC)
以上で変更完了です。
後はビルドすればDLLができるはずです。