利用arm-elf-gcc编译boa的问题及解决办法

在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(&current_time);
        time_offset = TIMEZONE_OFFSET(t);/* util.c:100 */
    } else {
        t = gmtime(&current_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

你可能感兴趣的:(gcc)