php是一門強大的語言,在這里我就不多做介紹了,其實關于在php源碼中加入擴展庫并且實現靜態編譯的方法在 php官網 中已有介紹,但是還是有一些細節需要我們注意的,下面以libevent
為例具體看一下在php中加入擴展庫并實現靜態交叉編譯的過程。
關于php的靜態交叉編譯推薦看eechen的一篇博文 “64位Ubuntu 14.04上使用musleabi最小化交叉編譯Android版PHP7”,里面有一個詳細的配置文檔,經過實踐在i386和i86_64的pc上都能成功編譯。
編譯php擴展庫需要兩個文件:擴展庫源程序和源碼,我用的是libevent-release-1.4.15-stable.tar.gz
,首先根據類似php中一些其他庫相關配置對其進行編譯:
cd /opt/phpdroid/src/libevent-release-1.4.15-stable
./autogen.sh
CFLAGS="--sysroot=$SYSROOT_MUSL -Os" \
./configure \
--prefix="/opt/phpdroid/deps" \
--host=$HOST
time make
make install
這個一般都不會出錯,可以檢查在相關的prefix路徑中是否已經生成了一些libevent靜態動態編譯文件,接下來開始在php的配置文件中添加libevent編譯配置,
cd /opt/phpdroid/src/php-7.0.9/ext,
git clone https://github.com/expressif/pecl-event-libevent.git (沒有使用官網上的擴展庫源碼是因為在編譯的過程中報錯),
mv pecl-event-libevent libevent && cd libevent
cd /opt/phpdroid/src/php-7.0.9 && rm configure && ./buildconf –force
./configure –help | grep libevent
( --with-libevent Include libevent support )
發現是使用–with-libevent
將libevent支持加入交叉編譯配置中,將其加入配置然后./configure \…
( 后面根據自己項目需要進行配置 ),運行成功見下圖:

運行命令 time make && make install
,得到下面輸出:

測試將編譯好的php加入到android系統下的目錄/system/bin/
中,運行命令php –m
查看php中包含的modules,發現libevent已經成功編譯入php:
