在arm板的uclinux内核中,有时需要利用boa做web服务器,
和arm板的linux内核不同,uclinux需要使用arm-elf-gcc编译工具,
uclinux内核下boa的编译一般有两种办法,
第一种:在进行uclinux内核移植时,使用uclinux自带的boa,和内核一起编译,
网上这种办法介绍的很多,这里不再描述
第二种:在x86PC上分开编译uclinux内核和boa,然后再将boa放到uclinux文件系统运行
在这里,本人将自己的编译经验总结分享一下,希望大家不吝赐教。
1. 解压boa-0.94.13.tar.gz,进入boa-0.94.13/src目录
2. ./configure,回车,生成Makefile
3. vim Makefile,修改编译器,如下:
当然需要确认已经安装了arm-elf工具(sh arm-elf-tools-20030314.sh)
CC = arm-elf-gcc -elf2flt
CPP =arm-elf-gcc -E
保存退出
4. make
出现如下错误
util.c: In function `get_commonlog_time':
util.c:100: structure has no member named `tm_gmtoff'
首先会想到的是查看util.c:100附近的代码,
if (use_localtime) {
t = localtime(¤t_time);
time_offset = TIMEZONE_OFFSET(t);/* util.c:100 */
} else {
t = gmtime(¤t_time);
time_offset = 0;
}
并看不出有什么问题。
使用Source Insight工具查找TIMEZONE_OFFSET,找到compat.h
#ifdef HAVE_TM_GMTOFF
#define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff /* 尝试将##去掉 */
#else
#define TIMEZONE_OFFSET(foo) timezone
#endif
5. 保存退出,make
错误和上面一样
6. 尝试别的办法,将util.c:100处的代码屏蔽,保存退出
make
编译成功
但是这样很可能照成boa使用过程中的错误
(这里我只是猜测,我没有试过,但是编译都没有使用tm_gmtoff,错误很可能发生)
7. 最终解决办法
可以思考一下,当使用arm-linux-gcc编译boa时,基本都能正常编译成功,
而使用arm-elf-gcc编译boa则会出现错误,那最可能有问题的地方,必然是
交叉编译工具的问题,本人使用的是arm-elf-tools-20030314.sh
找到arm-elf安装目录: /usr/local/arm-elf/
利用source Insight工具可以搜索“tm_gmtoff”,找到/usr/local/arm-elf/include/time.h
vim time.h
将time.h:130的条件编译代码修改为“#if 1”
保存退出。
进入boa-0.94.13/src目录,建议make clean一下
make
编译成功
至此,arm-elf-gcc 编译boa问题解决,如果你仍然有问题,多去思考吧。
本篇文章来源于:开发学院 http://edu.codepub.com 原文链接:http://edu.codepub.com/2009/0918/15531.php