基于ARM-LINUX的PHP应用

 

软件环境

• 操作系统:fedora9

•   PHP版本:php-5.2.16

•   PHP测试网页:http://download.csdn.net/source/3237445

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

•   WEB SERVERboa

• 开发板: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

 

Ÿ  编译

fc9gcc编译一切正常,且编译出来的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.1lib库中没有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,表明fc932位操作系统。

 

#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所在目录>

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值