Paradigm Shift Design

ISHITOYA Kentaro's blog.

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

と書けばいいです。副作用があるかどうかは知りません。