閉じる

libxml2 for windows

今までは出来合いの win32のバイナリを使っていたのだけど 64bitのバイナリが必要になったので独自ビルドを試みる。

libxml2-sources-2.7.7.tar.gz*1 を適当な場所に展開。

testapi.cが変な文字コードで書かれているようでエラーになってしまうので、294行目を変更。*2

2912-0.cpp
// if (no == 2) return((xmlChar) 'o');
if (no == 2) return((xmlChar) '\xf8');

win32に移動して以下を実行。

2912-1.bat
@echo off
: x86native
call "C:\Program Files\Microsoft Visual Studio 8\VC\vcvarsall.bat" x86
cscript configure.js iconv=no zlib=no ftp=no http=no compiler=msvc debug=yes prefix="x86\debug" cruntime=/MTd
nmake /f Makefile.msvc clean install
cscript configure.js iconv=no zlib=no ftp=no http=no compiler=msvc debug=no prefix="x86\release" cruntime=/MT
nmake /f Makefile.msvc clean install
: x64cross
call "C:\Program Files\Microsoft Visual Studio 8\VC\vcvarsall.bat" x86_amd64
cscript configure.js iconv=no zlib=no ftp=no http=no compiler=msvc debug=yes prefix="x64\debug" cruntime=/MTd
nmake /f Makefile.msvc clean install
cscript configure.js iconv=no zlib=no ftp=no http=no compiler=msvc debug=no prefix="x64\release" cruntime=/MT
nmake /f Makefile.msvc clean install
: cleanup
nmake /f Makefile.msvc clean

以上で x86\debug/x86\release下にヘッダファイル、dll(+インポートライブラリ)、スタティックライブラリが作成される。

configureオプションを見ればわかるけど、いろいろ無効にしているのでこれらが必要ならば変更を。
Cランタイムのオプションも必要なら /MDとかに。

2012/11/04追記

libxml2-sources-2.9.0.tar.gzと VC11の組み合わせはビルド可能だね。
vcvarsall.batのパスを変更しただけで、testapi.cの変更も不要。

2912-2.bat
@echo off
: x86native
call "C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\vcvarsall.bat" x86
cscript configure.js iconv=no zlib=no ftp=no http=no compiler=msvc debug=yes prefix="x86\debug" cruntime=/MTd
nmake /f Makefile.msvc clean install
cscript configure.js iconv=no zlib=no ftp=no http=no compiler=msvc debug=no prefix="x86\release" cruntime=/MT
nmake /f Makefile.msvc clean install
: x64cross
call "C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\vcvarsall.bat" x86_amd64
cscript configure.js iconv=no zlib=no ftp=no http=no compiler=msvc debug=yes prefix="x64\debug" cruntime=/MTd
nmake /f Makefile.msvc clean install
cscript configure.js iconv=no zlib=no ftp=no http=no compiler=msvc debug=no prefix="x64\release" cruntime=/MT
nmake /f Makefile.msvc clean install
: cleanup
nmake /f Makefile.msvc clean

2012/11/07追記

libxml2-sources-2.9.0.tar.gzと VC8の組み合わせも大丈夫だね。

win32に移動して以下を実行。

2912-3.bat
@echo off

set VCBVARSALL_BAT=C:\Program Files\Microsoft Visual Studio 8\VC\vcvarsall.bat
set TOOLSET=msvc-8.0
if exist "%VCBVARSALL_BAT%" goto build
set VCBVARSALL_BAT=C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\vcvarsall.bat
set TOOLSET=msvc-11.0
if exist "%VCBVARSALL_BAT%" goto build
echo vcvarsall.bat not found
goto end

:build
: x86native
call "%VCBVARSALL_BAT%" x86
cscript configure.js iconv=no zlib=no ftp=no http=no compiler=msvc debug=yes prefix="x86\debug" cruntime=/MTd
nmake /f Makefile.msvc clean install
cscript configure.js iconv=no zlib=no ftp=no http=no compiler=msvc debug=no prefix="x86\release" cruntime=/MT
nmake /f Makefile.msvc clean install
: x64cross
call "%VCBVARSALL_BAT%" x86_amd64
cscript configure.js iconv=no zlib=no ftp=no http=no compiler=msvc debug=yes prefix="x64\debug" cruntime=/MTd
nmake /f Makefile.msvc clean install
cscript configure.js iconv=no zlib=no ftp=no http=no compiler=msvc debug=no prefix="x64\release" cruntime=/MT
nmake /f Makefile.msvc clean install
: cleanup
nmake /f Makefile.msvc clean

:end

2.7.8からなのか 2.9.0からのかわからないけど、ヘッダファイルのディレクトリ構造が変わってる。
以前は include直下に libxmlが配置されていたのに 2.9.0では include直下には libxml2があり、其の下に libxmlが配置されるようになった。
ソースをいちいち修正するのも面倒なのでサーチパスを include/から include/libxml2/に変更して対応。

2014/05/01追記

libxml2-sources-2.9.1.tar.gzと VC12(2013)の組み合わせ。

win32に移動して以下を実行。

2912-4.bat
@echo off

set VC_ROOT=C:\Program Files\Microsoft Visual Studio 8\VC
if exist "%VC_ROOT%" goto build

set VC_ROOT=C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC
if exist "%VC_ROOT%" goto build

set VC_ROOT=C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC
if exist "%VC_ROOT%" goto build

echo vcvarsall.bat not found
goto end

:build

set VCVARSALL_BAT=%VC_ROOT%\vcvarsall.bat

: x86native
call "%VCVARSALL_BAT%" x86
cscript configure.js iconv=no zlib=no ftp=no http=no compiler=msvc debug=yes prefix="x86\debug" cruntime=/MTd
nmake /f Makefile.msvc clean install
cscript configure.js iconv=no zlib=no ftp=no http=no compiler=msvc debug=no prefix="x86\release" cruntime=/MT
nmake /f Makefile.msvc clean install
: x64cross
call "%VCVARSALL_BAT%" x86_amd64
cscript configure.js iconv=no zlib=no ftp=no http=no compiler=msvc debug=yes prefix="x64\debug" cruntime=/MTd
nmake /f Makefile.msvc clean install
cscript configure.js iconv=no zlib=no ftp=no http=no compiler=msvc debug=no prefix="x64\release" cruntime=/MT
nmake /f Makefile.msvc clean install
: cleanup
nmake /f Makefile.msvc clean

:end

Git Repositoryを見ると 2.9.1が最新なのだけど、1年以上前のリリースなんだよね。
ログを見ると細かい動きはあるようなのだけど、どうなのかね?

2015/03/08追記

ふと様子を見に行ったら 2.9.2がいたのでビルドしてみた。

libxml2-sources-2.9.2.tar.gzと VC14(2015preview)の組み合わせ。

win32/configure.jsの 17行目、「var configFile = srcDirXml + “\\configure.in”;」を「var configFile = srcDirXml + “\\configure.ac”;」に書き換え。*3

win32に移動して以下を実行。

2912-5.bat
:@echo off

set VC_ROOT=C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC
if exist "%VC_ROOT%" goto build

set VC_ROOT=C:\Program Files\Microsoft Visual Studio 8\VC
if exist "%VC_ROOT%" goto build

set VC_ROOT=C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC
if exist "%VC_ROOT%" goto build

set VC_ROOT=C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC
if exist "%VC_ROOT%" goto build

echo vcvarsall.bat not found
goto end

:build

set VCVARSALL_BAT=%VC_ROOT%\vcvarsall.bat

:build
: x86 native
call "%VCVARSALL_BAT%" x86
cscript configure.js iconv=no zlib=no ftp=no http=no compiler=msvc debug=yes prefix="x86\debug" cruntime=/MTd
nmake /f Makefile.msvc clean install
cscript configure.js iconv=no zlib=no ftp=no http=no compiler=msvc debug=no prefix="x86\release" cruntime=/MT
nmake /f Makefile.msvc clean install
: x64 cross
call "%VCVARSALL_BAT%" x86_amd64
cscript configure.js iconv=no zlib=no ftp=no http=no compiler=msvc debug=yes prefix="x64\debug" cruntime=/MTd
nmake /f Makefile.msvc clean install
cscript configure.js iconv=no zlib=no ftp=no http=no compiler=msvc debug=no prefix="x64\release" cruntime=/MT
nmake /f Makefile.msvc clean install
: cleanup
nmake /f Makefile.msvc clean

:end

2016/01/16追記

2.9.3がいたのでビルドしてみた。
libxml2-sources-2.9.3.zipと VC14(2015)の組み合わせ。
2.9.2の時に必要だった configure.jsの書き換えは不要。
win32へ移動し、2.9.2の時と同じバッチファイルを実行。
デバッグ版アプリの終了時に落ちるようだったらリリース版の dllに入れ替えてみると良い。

2018/12/26追記

libxml2-sources-2.9.7.tar.gzと VC14(2015)の組み合わせ。
2.9.3同様、win32へ移動し、2.9.2の時と同じバッチファイルを実行。


*1 最新の 2.7.8に含まれる Makefile.msvcが期待通りに動かないので型落ちでお茶を濁す。

*2 日本語環境なので SJISと見られて 0xf8で始まる文字リテラルがおかしな事になってる

*3 設定ファイルの元のファイル名を変更したは良いけど win32に関して追従漏れってところ?

コメントを残す

メールアドレスが公開されることはありません。必須項目には印がついています *

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)