久しぶりのプログラミングネタです。現在リリースしている
LE:PAdES:LibのWindows64bit版が必要になりプロジェクトをリビルド…しようと思ったのですが使っているオープンソース系プロジェクトの幾つかでWindows64bit版のバイナリが無いものがありました。XML操作ライブラリである
libxml2もその1つです。仕方が無いのでソースからビルドする事にしました。ついでにlibxml2が依存していたiconvも不要なので切り離すことにしました。
● ビルド手順
まず以下より libxml2-2.7.8.zip をダウンロードします。
https://git.gnome.org/browse/libxml2/
次にスタートメニューよりVisualStudio2005のコマンドプロンプトを開きます。[Microsoft Visual Studio 2005] -> [Visual Studio Tools] の下にあります。VisualStudio2010等でも同じです。
32bitビルド時: [Visual Studio 2005 コマンドプロンプト]
64bitビルド時: [Visual Studio 2005 x64 Win64 コマンドプロンプト]
どちらでコマンドプロンプトを開くかで 32bit と 64bit の切り替えが可能です。便利ですね(^^;
次に展開したフォルダ下のwin32フォルダの下に移動します。
> cd libxml2-2.7.8/win32
ConfigureによりMakefileを生成します。この時に iconv はオフにします。iconvをオフにしてもUTF-8は利用可能です。
> cscript configure.js compiler=msvc iconv=no debug=no cruntime=/MD vcmanifest=yes
ちなみにデバッグ時は debug=yes cruntime=/MDd とします。
次に生成された Makefile を修正します。修正しないとエラーでビルドできません。これはConfigureのバグとのことです。
-----(修正前)---------------------------
+!if "$(WITH_ICU)" == "1"
+LIBS = $(LIBS) icu.lib
+!endif
-----(修正後)---------------------------
!if "$(WITH_ICU)" == "1"
LIBS = $(LIBS) icu.lib
!endif
----------------------------------------
次に 64bit用に win32 をコピーした win32_64 フォルダを作成しておきます。そしてビルドします。この時32bit用のコマンドプロンプトで開いているとします。
> nmake /f makefile
・以下エラーが出ますがテストコマンドのビルド中なので無視しました。
----------------------------------------
(前略)
..\testapi.c(294) : error C2001: 定数が 2 行目に続いています。
..\testapi.c(295) : error C2143: 構文エラー : ')' が 'return' の前にありません。
NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio 8\VC\BIN\amd64\cl.exe"' : リターン コード '0x2'
Stop.
----------------------------------------
32bit用のコマンドプロンプトを終了して64bit用のコマンドプロンプトで win32_64 フォルダの下に移動して同様にビルドします。これで win32/win32_64 の下に bin.msvc の下にdll/libが生成されます。
これでiconvに依存せず32/64bit両方に対応したlibxml2のVisualStudioビルド版の完成です。私の使っている分では特に問題も無く使えています。なおzlibは別途必要です。zlibのWindows 32/64bit版のDLLバイナリは
ここにあります。以上参考になれば幸いです。