rubyがコンパイルできたみたいなのでPHPもCygwin用をLinuxでコンパイルしてみた。Cygwinでコンパイルすると数時間が掛かったけど、Linuxだと一時間かからないね。
コード準備
wget http://jp2.php.net/get/php-5.3.5.tar.gz tar zxvf php-5.3.5.tar.gz mkdir /home/takuya/php-cygwin cd /home/takuya/php-cygwin
コンパイラを指定する*1
export CROSS_COMPILE=i686-pc-cygwin- #PATHは通ってる前提 export CC=${CROSS_COMPILE}"gcc" export CXX=${CROSS_COMPILE}"g++" export PREFIX=`pwd`
configure かける
../php-5.3.5/configure --host=i686-pc-cygwin\ --target=i686-pc-cygwin\ #←コピペの時に紛れたか? --build=i686-pc-linux\ --prefix=$PREFIX\ --without-iconv\
makeする --失敗
libxmlがcygwin向けじゃないから無理らしい
i686-pc-cygwin/bin/ld: warning: --export-dynamic is not supported for PE targets, did you mean --export-all-symbols? /usr/lib/libxml2.so: file not recognized: File format not recognized collect2: ld returned 1 exit status make: *** [sapi/cgi/php-cgi.exe] エラー 1
libxmlがエラーになるのでクロスコンパイル環境にlibxmlを作ってみた
cygwin 向け libxmlを作成
git インストール
sudo oaptitude install git git clone libxml cd libxml ./configure --prefix=$PREFIX --host=i686-pc-cygwin --build=i686-pc-linux make make install
make やり直し
作ったlibxmlを使って、PHPをビルドします。
export CROSS_COMPILE=i686-pc-cygwin- export CC=${CROSS_COMPILE}"gcc" export CXX=${CROSS_COMPILE}"g++" export PREFIX=`pwd` ../php-5.3.5/configure --host=i686-pc-cygwin\ --build=i686-pc-linux\ --prefix=$PREFIX\ --without-iconv\ --with-libxml-dir=/home/takuya/build/cygwin --disable-phar
make できた
make make install tar cvzf php-cygwin.tgz php-cygwin
Windows側でテストとか。実行とか
転送して・・・
scp 192.168.2.5:~/php-cygwin.tgz . tar xvzf php-cygwin.tgz
実行した
cd php-cygwin/bin ./php.exe -v PHP 5.3.5 (cli) (built: Mar 15 2011 17:24:05) Copyright (c) 1997-2010 The PHP Group Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
動いた!。安心です。
2011-09-13 補足
PATHは通ってる前提.
私の場合.以前のコンパイルで、次の場所にクロスコンパイル環境を作って居る
export PREFIX=/home/takuya/build/cygwin #prefix を決める export PATH=${PREFIX}/bin:${PATH} #クロスコンパイルのインストール先へパスを通す
クロスコンパイル環境の作成はこっち
http://d.hatena.ne.jp/takuya_1st/20110314/1300132009
*1: 補足参照