基於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所在目錄>

注意最後的一個“/”必須要有!

發佈了25 篇原創文章 · 獲贊 26 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章