您的位置:首页 > 移动开发

APPWeb+PHP5+SQLite3在S3C6410上移植之一

2012-12-02 20:48 417 查看
相关支持库移植

主要包括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
整数运算能力检测

(1+1运算300万次)
7.439s
15.547s
0.535s
浮点运算能力检测

(圆周率开平方300万次)
42.599s
无法测出
1.607s
数据I/O能力检测

(读取10K文件1万次)
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命令查看文件信息,如下所示:



在未使用strip工具去除调试信息之前,本次编译的库文件大小为12.5M,执行arm-linux-strip得到的库文件大小仅为3.8M。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: