PHP5.2.9をWindowsでコンパイル
わけあって、WindowsでPHPをビルドしなければならなかったのでそのメモ
musicwordsさんが分かりやすく全工程をまとめてくださっていますのでご覧ください。
PHPをソースコードからビルド - Collect note
ビルド環境はWindowsXP/VC8(VS2005)
コマンドプロンプトで行いましたが、Visual Studioを使った方がいいかもしれません。
PHP: ソースからのビルド - ManualのWindows build toolsやWindows DNS resolver libraryはリンク切れしているので、を参考に。
1、Windows Platform SDKをインストール
http://www.microsoft.com/downloads/details.aspx?FamilyID=0baf2b35-c656-4969-ace8-e4c0c0716adb&displaylang=en
2、binary-toolsをダウンロード
PECL :: Error 404
3、ライブラリをダウンロード
下記URLから必要なライブラリをダウンロード
http://pecl2.php.net/downloads/php-windows-builds/php-libs/VC8/x86/
最低限、bindlib/libiconv/libxml2/zlibが必要です。
4、PHPのソースをダウンロード
PHP: Downloadsからソースをダウンロード
5、ディレクトリを作成し、そこに2,3の手順でDLしたものを展開
ここでは
c:\languages\php_build
を作成し、そこに
- binary-tools.zip/binの中身
- zlibのbin/include/lib
- libxml2のbin/include/lib
- iconvのbin/include/lib
- bindlibのinclude/lib
をコピーしました。
6、libiconv_a.libをiconv.libにリネーム
ここでは、c:\languages\work\lib\libiconv_a.libをiconv.libにリネームします。
7、4のソースコードを適当な位置に展開
ここでは
c:\languages\source\php-5.2.9
に展開しました。
8、コマンドプロンプトを立ち上げる
"c:\Program Files\Microsoft Visual Studio 8\VC\bin\vcvars32.bat" set PATH=c:\languages\php_build;%PATH% cd c:\languages\source\php-5.2.9 buildconf cscript configure.js \ --with-extra-includes="c:\languages\php_build\include" \ --with-extra-libs="c:\languages\php_build\lib" \ --enable-object-out-dir=.. nmake
これで、ビルドできます。コンパイルエラーが出る場合は、configureを
cscript configure.js \ --with-extra-includes="c:\languages\php_build\include" \ --with-extra-libs="c:\languages\php_build\lib" \ --disable-all --enable-cli --enable-cgi --disable-ipv6
として、最小限のものをコンパイルした方がいいです。ビルドしたものは
c:\languages\source\Release_TS
に生成されます。
因みに
C:\languages\source\php-5.2.9>nmake Microsoft(R) Program Maintenance Utility Version 8.00.50727.42 Copyright (C) Microsoft Corporation. All rights reserved. spprintf.c main\spprintf.c(184) : error C2491: 'strnlen' : dllimport 関数 の定義は許されま せん。 NMAKE : fatal error U1077: '"C:\Program Files\Microsoft Visual Studio 8\VC\BIN\c l.exe"' : リターン コード '0x2' Stop.
とか言われる場合は、main/config_w32.hの末尾あたりに
#define HAVE_STRNLEN 1
と書けばいいです。副作用があるかどうかは知りません。