You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu 14.04下交叉编译GCC 4.8.2时configure脚本执行失败

交叉编译GCC 4.8.2 针对大端MIPS时libgcc配置失败:exec调用-EB找不到

问题背景

我已经折腾好几天了,目标是交叉编译GCC 4.8.2,用来给大端MIPS系统编译旧版本的strace。我跟着一份交叉编译指南一步步来,前面的步骤都没问题,但到了结合newlib重建GCC的环节,直接报错卡壳了。

错误输出

checking for mips-linux-gnu-gcc... /opt/cross/gcc-build/./gcc/xgcc -B/opt/cross/gcc-build/./gcc/ -B/opt/cross/gcc-mips/mips-linux-gnu/bin/ -B/opt/cross/gcc-mips/mips-linux-gnu/lib/ -isystem /opt/cross/gcc-mips/mips-linux-gnu/include -isystem /opt/cross/gcc-mips/mips-linux-gnu/sys-include
checking for suffix of object files... configure: error: in /opt/cross/gcc-build/mips-linux-gnu/libgcc': configure: error: cannot compute suffix of object files: cannot compile See config.log' for more details.
make[1]: *** [configure-target-libgcc] Error 1
make[1]: Leaving directory `/opt/cross/gcc-build'
make: *** [all] Error 2

config.log关键摘录

Configured with: ../gcc-4.8.2/configure --target=mips-linux-gnu --prefix=/opt/cross/gcc-mips --with-gnu-as --with-gnu-ld --enable-languages=c,c++ --disable-multilib --with-newlib
Thread model: posix
gcc version 4.8.2 (GCC)
configure:3358: $? = 0
configure:3347: /opt/cross/gcc-build/./gcc/xgcc -B/opt/cross/gcc-build/./gcc/ -B/opt/cross/gcc-mips/mips-linux-gnu/bin/ -B/opt/cross/gcc-mips/mips-linux-gnu/lib/ -isystem /opt/cross/gcc-mips/mips-linux-gnu/include -isystem /opt/cross/gcc-mips/mips-linux-gnu/sys-include -V >&5
xgcc: error: unrecognized command line option '-V'
xgcc: fatal error: no input files
compilation terminated.
configure:3358: $? = 1
configure:3347: /opt/cross/gcc-build/./gcc/xgcc -B/opt/cross/gcc-build/./gcc/ -B/opt/cross/gcc-mips/mips-linux-gnu/bin/ -B/opt/cross/gcc-mips/mips-linux-gnu/lib/ -isystem /opt/cross/gcc-mips/mips-linux-gnu/include -isystem /opt/cross/gcc-mips/mips-linux-gnu/sys-include -qversion >&5
xgcc: error: unrecognized command line option '-qversion'
xgcc: fatal error: no input files
compilation terminated.
configure:3358: $? = 1
configure:3374: /opt/cross/gcc-build/./gcc/xgcc -B/opt/cross/gcc-build/./gcc/ -B/opt/cross/gcc-mips/mips-linux-gnu/bin/ -B/opt/cross/gcc-mips/mips-linux-gnu/lib/ -isystem /opt/cross/gcc-mips/mips-linux-gnu/include -isystem /opt/cross/gcc-mips/mips-linux-gnu/sys-include -o conftest -g -O2 -Wno-error -minterlink-mips16 conftest.c >&5
/opt/cross/gcc-build/./gcc/as: 87: exec: -EB: not found
configure:3377: $? = 1
configure:3565: checking for suffix of object files
configure:3587: /opt/cross/gcc-build/./gcc/xgcc -B/opt/cross/gcc-build/./gcc/ -B/opt/cross/gcc-mips/mips-linux-gnu/bin/ -B/opt/cross/gcc-mips/mips-linux-gnu/lib/ -isystem /opt/cross/gcc-mips/mips-linux-gnu/include -isystem /opt/cross/gcc-mips/mips-linux-gnu/sys-include -c -g -O2 -Wno-error -minterlink-mips16 conftest.c >&5
/opt/cross/gcc-build/./gcc/as: 87: exec: -EB: not found
configure:3591: $? = 1
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "GNU C Runtime Library"
| #define PACKAGE_TARNAME "libgcc"
| #define PACKAGE_VERSION "1.0"
| #define PACKAGE_STRING "GNU C Runtime Library 1.0"
| #define PACKAGE_BUGREPORT ""
| #define PACKAGE_URL "http://www.gnu.org/software/libgcc/"
| /* end confdefs.h. */
|
| int
| main ()
| {
|
| ;
| return 0;
| }
configure:3605: error: in `/opt/cross/gcc-build/mips-linux-gnu/libgcc':
configure:3608: error: cannot compute suffix of object files: cannot compile
See `config.log' for more details.

我的初步分析

我打开了/opt/cross/gcc-build/gcc/as脚本,第87行是exec $original ${1+"$@"}。错误提示exec: -EB: not found,这明显是$original变量是空的,导致exec直接把-EB当成要执行的命令了。我试过手动把$original设成/opt/cross/gcc-build/./gcc/xgcc之类的路径,但都没搞定。查了一圈帖子,好像没人碰到过这个特定的变量为空的问题,实在没辙了,来求助!


解决方案

这个问题的核心是GCC构建过程中生成的as包装脚本没正确设置$original变量,导致它找不到真正的交叉汇编器。下面是一步步的解决办法:

1. 先确认交叉汇编器是否安装正确

首先得确保你已经编译并安装了针对大端MIPS的GNU汇编器(mips-linux-gnu-as),它应该在你的交叉工具链前缀目录下,比如/opt/cross/gcc-mips/bin/mips-linux-gnu-as。

如果还没装,先编译binutils(建议选和GCC 4.8.2兼容的版本,比如binutils 2.23.2):

mkdir binutils-build && cd binutils-build
../binutils-2.23.2/configure --target=mips-linux-gnu --prefix=/opt/cross/gcc-mips --with-gnu-as --with-gnu-ld
make && make install

2. 手动修复as脚本里的$original变量

打开/opt/cross/gcc-build/gcc/as脚本,找到$original的定义位置(一般在脚本开头),把它改成正确的交叉汇编器路径:

# 把原来的定义替换成这个路径
original="/opt/cross/gcc-mips/bin/mips-linux-gnu-as"

保存后重新运行make试试。

3. 检查环境变量和配置参数

另外还要确保:

  • PATH环境变量里包含/opt/cross/gcc-mips/bin,这样构建系统能找到交叉工具链
  • 重新检查GCC的configure命令,确保--with-gnu-as参数指向正确的汇编器,或者干脆移除这个参数让系统自动检测

4. 备选:彻底清理后重新构建

如果上面的方法都没用,那就把构建目录彻底清干净,从头再来:

cd /opt/cross/gcc-build
make distclean
../gcc-4.8.2/configure --target=mips-linux-gnu --prefix=/opt/cross/gcc-mips --with-gnu-as --with-gnu-ld --enable-languages=c,c++ --disable-multilib --with-newlib
make

内容的提问来源于stack exchange,提问作者exclamationmark

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 04:47:39