軟件環境
• 操作系統:fedora9
• PHP版本:php-5.2.16
• PHP測試網頁:http://download.csdn.net/source/3237445
• 交叉編譯器: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所在目錄>
注意最後的一個“/”必須要有!