基于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所在目录>
注意最后的一个“/”必须要有!