基于ARM Linux的PHP应用

软件环境
操作系统:Fedora 9

PHP版本:php-5.2.16 (http://www.php.net/)

PHP测试网页:http://www.linuxidc.net/thread-2233-1-1.html

交叉编译器:arm-linux-gcc 3.4.1

WEB SERVER:boa

开发板:YC2440

编译
   生成Makefile

# cd php-5.2.16

#./configure --host=arm-linux --prefix=/usr/local/php-arm --disable-all --enable-pdo --with-sqlite --with-pdo-sqlite --with-zlib --without-iconv

   编译

fc9下gcc编译一切正常,且编译出来的php-cgi文件也能够正常使用。

但是交叉编译,问题颇多。

修改Makefile文件

– 修改

CC = gcc

CPP = gcc -E

– 为

CC = arm-linux-gcc

CPP = arm-linux-gcc -E

交叉编译

#make

问题列表
1、 问题:

编译后,系统提示:

php/ext/zlib/php_zlib.h 

php/ext/standard/image.c

zlib.h: No such file or directory

问题原因:

php-5.2.16目录中没有zlib.h文件。

解决办法:

php/ext/zlib/php_zlib.h 

php/ext/standard/image.c

文件中引用的“zlib.h”头文件,改为“/usr/include/zlib.h”

问题解决。

2、问题:

编译后,系统提示:

/arm-linux/bin/ld: cannot find -lz

问题原因:

arm-linux-gcc 3.4.1的lib库中没有libz库文件。

解决办法:

将/lib中的libz.so.1.2.3拷贝至:

/usr/local/arm/3.4.1/arm-linux/lib/

编译后,系统提示:

/usr/bin/ld: skipping incompatible /usr/lib/../../libz.so when searching for -lz

怀疑是系统和文件的兼容性问题:

#getconf LONG_BIT

32 ----> 系统返回32,表明fc9是32位操作系统。

#file /lib/libz.so.1.2.3

/lib/libz.so.1.2.3: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), stripped

表明该文件也是32位文件,但基于Intel,固与arm-linux-gcc不兼容(个人分析)。

#find /usr -name "libz.*"

结果发现

/usr/local/arm/2.95.3/arm-linux/lib/

目录下有4个相关文件是:

lib libz.so libz.so.1 libz.so.1.2.3 libz.a

#file /usr/local/arm/2.95.3/arm-linux/lib/libz.so.1.2.3

libz.so: ELF 32-bit LSB shared object, ARM, version 1, not stripped

表明该文件也是32位文件,但基于arm,凭经验,这些文件是可以使用的。

将其拷贝至:

/usr/local/arm/3.4.1/arm-linux/lib/

#make clean&&make

编译问题解决。

3、问题:

使用编译后的php-cgi在开发板上测试phpinfo.php文件时,超级终端打印出“php-cgi relocation error undefined symbol ‘__umodsi3’”,且页面无法正常显示信息。

问题原因:

据网友提示是因为“软浮点,硬浮点”之类的问题。

解决办法:

放弃使用arm-linux-gcc 2.95.3中的libz.a,改用arm-linux-gcc 3.3.2中的libz.a文件。

删除/usr/local/arm/3.4.1/arm-linux/lib/lib目录中的libz.so libz.so.1 libz.so.1.2.3 libz.a(这4个文件是为了解决“问题二”时从arm-linux-gcc 2.95.3中拷贝过来的)文件。

将/usr/local/arm/3.3.2/arm-linux/lib/中的libz.a文件拷贝至

/usr/local/arm/3.4.1/arm-linux/lib/lib目录中。

再次编译,测试phpinfo.php文件,一切正常。

4、问题:

编译好的php-cgi文件,以及测试文件(.php,.html,.cgi)应该放到什么位置?

解决办法:

php-cgi放在boa.conf 配置的cgi-bin目录下。

测试文件(.php,.html,.cgi)放在boa.conf 配置的DocumentRoot目录下。

5、问题:

如何访问测试页面?

解决办法:

保证PC与开发板连通的情况下,在浏览器地址栏中输入:

http://192.168.1.168/cgi-bin/php-cgi/index.php

http://192.168.1.168/cgi-bin/php-cgi/phpinfo.php

这里需要特别注意boa.conf中的配置,scriptAlias的修改

– 修改 #scrīptAlias /cgi-bin/  /usr/lib/cgi-bin/

– 为 scrīptAlias /cgi-bin/  < php-cgi所在目录>

注意最后的一个“/”必须要有!

相关推荐