主要包括libiconv、zlib以及加密服务组件matrixssll。
下载Embedthis提供的第三方工具包,采用git从GitHub获取packages软件包,命令如下。
gitclone http://github.com/embedthis/packages
如果下载失败,可以在直接在https://github.com/embedthis/packages中选择下载ZIP包,内容包括:
其中,libiconv-1.11、zlib和matrixssl中的matrixssl1-8-8-open被本次移植采用,php目录中的PHP版本较高,并且默认目标平台为Linux和Windows平台,不支持交叉编译,编译时会出现诸多问题,本次移植并未采用。
1编译libiconv
libiconv库是编译xmlrpc必须的支持库,选择libiconv-1.11,注意:最新版iocnv,编译时会可能会出现诸多问题,这里不建议采用。
首先设置CC、AR等环境变量的路径(假设arm-linux-gcc工具安装在/usr/local/arm/4.2.2-eabi/目录下),具体设置如下所示。
export CC=/usr/local/arm/4.2.2-eabi/usr/bin/arm-linux-gcc
export AR=/usr/local/arm/4.2.2-eabi/usr/bin/arm-linux-ar
export LD=/usr/local/arm/4.2.2-eabi/usr/bin/arm-linux-ld
export RANLIB=/usr/local/arm/4.2.2-eabi/usr/bin/arm-linux-ranlib
export STRIP=/usr/local/arm/4.2.2-eabi/usr/bin/arm-linux-strip
export CC_FOR_BUILD=gcc
配置:
./configure --build=arm-linux --host=i686-linux --prefix=/usr/local/iconvarm
配置完成后,编译安装:
make
make install
--prefix参数指定libconv库安装的位置,在编译PHP时需要引用该位置。
2编译libz.so
zlib是PHP必须的支持库,这里采用的版本为zlib-1.2.6。注意:CC、AR等环境变量选择为arm-linux-xx。
./configure --prefix=/usr/local/zlib
配置成功之后,编译:
make clean
make
--prefix参数指定libz库安装的位置,编译PHP时,加入--with-zlib-dir=/usr/local/zlib编译参数。
3编译libxml2.so
源码包版本为libxml2-2.7.4,libxml2库同样是PHP所必须的支持库。
./configure --build=arm-linux --host=i686-linux --disable-ipv6 --prefix=/usr/local/libxmlarm
配置成功之后,编译安装:
make
make install
编译PHP
当上述支持库编译完成之后,进行PHP编译。注意:上述编译得到的*.so文件格式必须为如下形式:
libz.so.1.2.6: ELF 32-bit LSB shared object,ARM, version 1 (SYSV), dynamically linked, not stripped
另外,正常编译得到的库文件包含调试信息,可以使用arm-linux-strip工具去除不必要的调试信息,以减小文件体积。
PHP采用的版本为PHP-5.2.17(PHP-5.3.8会出问题,如无法正常运行,服务器自动重启,建议采用此版本)。
PHP配置参数如下:
./configure --target=arm --host=arm-linux --disable-debug --disable-rpath --disable-cli--enable-bcmath --enable-calendar --disable-maintainer-zts --enable-embed=shared --enable-ftp--enable-inline-optimization --enable-magic-quotes --enable-safe-mode --enable-sockets --enable-wddx --sysconfdir=/etc/appweb--with-pic --with-exec-dir=/etc/appweb/exec --with-regex=system --with-pear --with-xmlrpc --with-zlib-dir=/usr/local/zlib --with-libxml-dir=/usr/local/libxmlarm --with-iconv-dir=/usr/local/iconvarm/
注意:在使能多线程模式,即附带参数--enable-maintainer-zts编译时,报错信息如下:
上述错误可以通过修改configure文件解决,修改内容如下:
将{ echo "configure: error: Your system seems to lack POSIXthreads." 1>&2; exit 1; }
替换为:
{ echo"configure: error: Your system seems to lack POSIX threads."1>&2; }#exit 1; }
在多线程与单线程模式下,PHP脚本运行性能对比(由雅黑PHP探针测得数据),如下表所示。
表2 PHP性能对比
性能参数 |
单线程模型 ARM11 667MHz |
多线程模型 ARM11 667MHz |
美国 IXwebhosting.com 4 x Xeon E5530 @ 2.40GHz |
整数运算能力检测 |
7.439s |
15.547s |
0.535s |
浮点运算能力检测 |
42.599s |
无法测出 |
1.607s |
数据I/O能力检测 |
0.961 |
11.112s |
0.058s |
通过上述对比分析,在单线程模式下系统性能好于多线程模式,所以本移植中PHP配置为单线程模式,另外AppWeb也需要禁用多线程模式。
配置完成之后,需要检查生成的Makefile文件,确保CC和CPP等环境变量指向交叉编译链,即arm-linux-xx,以及相关库文件和头文件的路径是否正确,正确配置信息如下图所示:
配置成功之后,系统提示如下信息:
编译安装:
make clean
make
make install
编译时如果出现如下错误,表示编译PHP的工具链并不是arm-linux-gcc而是gcc,所以需要重新设置CC、AR等环境变量指向arm-linux-xx交叉工具链。
编译成功,系统提示信息如下:
注意:编译完成后不可执行make test,因为PHP编译的目标为网关(ARM平台),所以运行时会报错。直接运行makeinstall进行安装即可。
安装完成后,在libs/目录下生成libphp5.so动态库文件,使用file命令查看文件信息,如下所示: