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

来源:互联网 发布:今日头条济南数据分析 编辑:程序博客网 时间:2024/06/11 16:22
相关支持库移植

主要包括libiconv、zlib以及加密服务组件matrixssll。

下载Embedthis提供的第三方工具包,采用gitGitHub获取packages软件包,命令如下。

gitclone http://github.com/embedthis/packages

如果下载失败,可以在直接在https://github.com/embedthis/packages中选择下载ZIP包,内容包括:


其中,libiconv-1.11zlibmatrixssl中的matrixssl1-8-8-open被本次移植采用,php目录中的PHP版本较高,并且默认目标平台为LinuxWindows平台,不支持交叉编译,编译时会出现诸多问题,本次移植并未采用。

1编译libiconv

libiconv库是编译xmlrpc必须的支持库,选择libiconv-1.11注意:最新版iocnv,编译时会可能会出现诸多问题,这里不建议采用。

首先设置CCAR等环境变量的路径(假设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

zlibPHP必须的支持库,这里采用的版本为zlib-1.2.6注意CCAR等环境变量选择为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.4libxml2库同样是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.17PHP-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文件,确保CCCPP等环境变量指向交叉编译链,即arm-linux-xx,以及相关库文件和头文件的路径是否正确,正确配置信息如下图所示:


配置成功之后,系统提示如下信息:


编译安装:

make clean

make

make install

编译时如果出现如下错误,表示编译PHP的工具链并不是arm-linux-gcc而是gcc,所以需要重新设置CCAR等环境变量指向arm-linux-xx交叉工具链。


编译成功,系统提示信息如下:


注意:编译完成后不可执行make test,因为PHP编译的目标为网关(ARM平台),所以运行时会报错。直接运行makeinstall进行安装即可。

安装完成后,在libs/目录下生成libphp5.so动态库文件,使用file命令查看文件信息,如下所示:


在未使用strip工具去除调试信息之前,本次编译的库文件大小为12.5M,执行arm-linux-strip得到的库文件大小仅为3.8M
0 0
原创粉丝点击