Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1751256
  • 博文数量: 100
  • 博客积分: 10122
  • 博客等级: 上将
  • 技术积分: 4092
  • 用 户 组: 普通用户
  • 注册时间: 2005-07-04 20:28
文章分类

全部博文(100)

文章存档

2010年(2)

2009年(28)

2008年(70)

我的朋友

分类: LINUX

2008-08-29 18:18:26

因为通常无法跑目标平台的程序,更或者只有 static stage1 gcc 时无法编译可运行的程序,编译 cross glibc时会遇到无法计算 long double的问题。这个小脚本片段通过编译c程序为as代码来来计算 long double :

    # get size of long double
    echo 'int size_of_long_double=sizeof(long double);' > long_double.c
    "$STAGE1_GCC" -S long_double.c
    ac_cv_sizeof_long_double=$(grep -A1 'size_of_long_double:' long_double.s | tail -n1 | sed -n 's/^.*\..*[ \t]\+\([0-9]\+\)$/\1/p')
    [ -z "$ac_cv_sizeof_long_double" ] && oops Failed to get size of long double

这段代码针对 arm 和 x86 目标平台都可以计算。 使用时设置 gcc 为你目标平台的  stage1 gcc 即可。

然后编译 glibc 时,类似这样运行 configure :

        ac_cv_sizeof_long_double=${ac_cv_sizeof_long_double} \
        libc_cv_forced_unwind=yes \
        libc_cv_c_cleanup=yes \
    ../../configure \
        --prefix=/usr \
        --host=$ARCH-linux \
        --enable-add-ons=nptl,$GLIBC_PORTS \
        --enable-bind-now \
        --with-tls \
        --with-__thread \
        --with-headers="$YCROSS_PREFIX"/sysroot/usr/include \
        CC="$STAGE1_GCC" \
        CFLAGS="-pipe -g -O3 $GLIBC_EXTRA_FLAGS"

阅读(1520) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~