それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

Cygwin向けにLinuxからPHPをクロスコンパイルする。

rubyがコンパイルできたみたいなのでPHPCygwin用を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
    • disable-phar は make install に bin/php (実際はphp.exe)を呼び出してこけまくったので、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: 補足参照