【问题标题】:Compilng libgcc xgcc error编译 libgcc xgcc 错误
【发布时间】:2013-04-11 04:42:54
【问题描述】:

我正在尝试安装交叉编译器,this tutorial,当我想制作 libgcc 时,我只输入了make all-target-libgcc 在我的终端。这会引发错误

checking whether ln -s works... yes
checking for i586-elf-gcc...  /usr/src/build-gcc/./gcc/xgcc -B/usr/src/build-gcc/./gcc/         -B/usr/local/cross/i586-elf/bin/ -B/usr/local/cross/i586-elf/lib/ -isystem /usr/local/cross/i586-elf/include -isystem /usr/local/cross/i586-elf/sys-include   
checking for suffix of object files... configure: error: in `/usr/src/build-gcc/i586-elf/libgcc':
configure: error: cannot compute suffix of object files: cannot compile
See `config.log' for more details.
make: *** [configure-target-libgcc] Error 1

在 config.log 我发现

Target: i586-elf
Configured with: ../gcc-4.8.0/configure --target=i586-elf --prefix=/usr/local/cross --        disable-nls --enable-languages=c,c++ --without-headers : (reconfigured) ../gcc-4.8.0/configure --target=i586-elf --prefix=/usr/local/cross --disable-nls --enable-languages=c,c++ --without-headers : (reconfigured) ../gcc-4.8.0/configure --target=i586-elf --prefix=/usr/local/cross --disable-nls --enable-languages=c,c++ --without-headers
Thread model: single
gcc version 4.8.0 (GCC) 
configure:3358: $? = 0
configure:3347:  /usr/src/build-gcc/./gcc/xgcc -B/usr/src/build-gcc/./gcc/ -    B/usr/local/cross/i586-elf/bin/ -B/usr/local/cross/i586-elf/lib/ -isystem /usr/local/cross/i586-elf/include -isystem /usr/local/cross/i586-elf/sys-include    -V >&5
xgcc: error: unrecognized command line option '-V'
xgcc: fatal error: no input files

事实上xgcc 没有'-V' 选项。我正在寻找如何编译libgcc的方法。

提前致谢

【问题讨论】:

  • 通常libgcc 是 GCC 编译器的一部分,因此应该使用 GCC 构建。构建它不需要特殊操作。
  • 这里有同样的错误。 gcc 版本 4.8.1 (GCC)

标签: linux gcc makefile libgcc


【解决方案1】:

问题是:在您尝试按照您的描述构建libgcc 之前,您构建了一个极端的准系统交叉编译器。现在,configure 脚本运行的部分标准测试是测试编译器,看它是否会在正常条件下生成一个工作的可执行文件。你的基本编译器不能。幸运的是,对于libgcc,您不需要生成可执行文件,只需生成静态库libgcc.a。问题是愚蠢的 GNU autoconf 生成的脚本没有意识到这一点。

我遇到了同样的问题并设计了一个非常丑陋的解决方法。您需要在 gcc 源目录中注释掉 libgcc/configure 文件的一部分。这是我为我的版本注释掉的部分;做与你类似的事情:

在第 3484 行:

{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
$as_echo "$ac_file" >&6; }
# BEGIN PHILLIP EDIT
# if test -z "$ac_file"; then :
  # $as_echo "$as_me: failed program was:" >&5
# sed 's/^/| /' conftest.$ac_ext >&5

# { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
# $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
# { as_fn_set_status 77
# as_fn_error "C compiler cannot create executables
# See \`config.log' for more details." "$LINENO" 5; }; }
# fi
ac_file='a.out'
# END PHILLIP EDIT
ac_exeext=$ac_cv_exeext

希望这会有所帮助。

【讨论】:

  • 我尝试了几个版本的 GCC,它总是一样的。你的答案似乎是唯一能解决我问题的答案。
【解决方案2】:

我在尝试自行构建 libstdc++ 时遇到了类似的问题。配置选项--enable-offload-target=x86_64-pc-linux-gnu 解决了这个问题,--disable-bootstrap 节省了相当多的编译时间。添加前一个标志后,make all-target-libstdc++-v3 停止抱怨 xgcc 并且编译器无法创建可执行文件。不需要上面的补丁,希望这对其他人有帮助。

【讨论】:

    【解决方案3】:

    注释掉libgcc/configure 文件中的以下部分为我解决了这个问题。查看https://stackoverflow.com/a/26245344/8138184 以获取有关配置文件的更多上下文。

    # for ac_option in --version -v -V -qversion; do
    #   { { ac_try="$ac_compiler $ac_option >&5"
    # case "(($ac_try" in
    #   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
    #   *) ac_try_echo=$ac_try;;
    # esac
    # eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
    # $as_echo "$ac_try_echo"; } >&5
    #   (eval "$ac_compiler $ac_option >&5") 2>conftest.err
    #   ac_status=$?
    #   if test -s conftest.err; then
    #     sed '10a\
    # ... rest of stderr output deleted ...
    #          10q' conftest.err >conftest.er1
    #     cat conftest.er1 >&5
    #     rm -f conftest.er1 conftest.err
    #   fi
    #   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
    #   test $ac_status = 0; }
    # done
    

    【讨论】:

      猜你喜欢
      • 2014-01-07
      • 2012-10-21
      • 2020-12-25
      • 2018-05-31
      • 1970-01-01
      • 2011-09-04
      相关资源
      最近更新 更多