autoconf 尝试在 bash 下调用“exec -m”,但 -m 不是 exec 的合法操作数

autoconf 尝试在 bash 下调用“exec -m”,但 -m 不是 exec 的合法操作数

这个问题实际上可能是关于从哪里获得帮助,而不是针对问题本身的帮助。啰嗦请见谅!

我正在尝试构建 gcc 以在 Win32 上运行并为 AVR 生成代码。我从 Arduino 人员使用的文件开始构建他们的 AVR 工具链。

在 Windows 机器上,Atmel 使用 GCC 4.9.2 来由 Arduino 人员构建他们当前的工具链(然后复制/修补),我安装了一个具有 4.9.2 版 GCC 的 MinGW 系统,下载了Arduino人的工具链源码并按照他们的指示进行操作(当然我不小心弄错了什么,或者类似的事情?)。

./configureautoconf 的阶段(实际上)G:\GNU-GCC\toolchain-avr\gcc\libgcc\configure似乎成功调用了 gcc 几次,使用了一个名为 xgcc.exe 的 Win32 程序,autoconf make 放置在我的 gcc-build/gcc 目录中。最后一次成功运行有-qversion编译器选项。

下一次运行是完全相同的调用,只是它用作-o conftest -g -w -O2 -g0 -DWIN32 conftest.c编译器选项,这次尝试使用以下命令关闭编译器exec -m

这不起作用,因为 bash exec 命令没有-m选项。

请注意,这xgcc.exe是一个真实的程序(不是脚本),并且由 autoconf make 步骤编译。它可能是交叉编译器,因为它被复制到gcc-cross.exe. 因此我假设 autoconf 启动器(M4 宏?)导致了错误。

这是 的一部分config.log:(查找以exec: usage: exec [-cl] [-a name] file ...

gcc version 4.9.2 (GCC) 
configure:3373: $? = 0
configure:3362: /g/gnu-gcc/toolchain-avr/gcc-build/./gcc/xgcc -B/g/gnu-gcc/toolchain-avr/gcc-build/./gcc/ -B/g/gnu-gcc/toolchain-avr/objdir/gcc/avr/bin/ -B/g/gnu-gcc/toolchain-avr/objdir/gcc/avr/lib/ -isystem /g/gnu-gcc/toolchain-avr/objdir/gcc/avr/include -isystem /g/gnu-gcc/toolchain-avr/objdir/gcc/avr/sys-include    -V 
xgcc.exe: error: unrecognized command line option '-V'
xgcc.exe: fatal error: no input files
compilation terminated.
configure:3373: $? = 1
configure:3362: /g/gnu-gcc/toolchain-avr/gcc-build/./gcc/xgcc -B/g/gnu-gcc/toolchain-avr/gcc-build/./gcc/ -B/g/gnu-gcc/toolchain-avr/objdir/gcc/avr/bin/ -B/g/gnu-gcc/toolchain-avr/objdir/gcc/avr/lib/ -isystem /g/gnu-gcc/toolchain-avr/objdir/gcc/avr/include -isystem /g/gnu-gcc/toolchain-avr/objdir/gcc/avr/sys-include    -qversion 
xgcc.exe: error: unrecognized command line option '-qversion'
xgcc.exe: fatal error: no input files
compilation terminated.
configure:3373: $? = 1
configure:3389: /g/gnu-gcc/toolchain-avr/gcc-build/./gcc/xgcc -B/g/gnu-gcc/toolchain-avr/gcc-build/./gcc/ -B/g/gnu-gcc/toolchain-avr/objdir/gcc/avr/bin/ -B/g/gnu-gcc/toolchain-avr/objdir/gcc/avr/lib/ -isystem /g/gnu-gcc/toolchain-avr/objdir/gcc/avr/include -isystem /g/gnu-gcc/toolchain-avr/objdir/gcc/avr/sys-include    -o conftest -g -w -O2 -g0 -DWIN32   conftest.c
g:/gnu-gcc/toolchain-avr/gcc-build/gcc/as: line 106: exec: -m: invalid option
exec: usage: exec [-cl] [-a name] file [redirection ...]
configure:3392: $? = 1
configure:3580: checking for suffix of object files
configure:3602: /g/gnu-gcc/toolchain-avr/gcc-build/./gcc/xgcc -B/g/gnu-gcc/toolchain-avr/gcc-build/./gcc/ -B/g/gnu-gcc/toolchain-avr/objdir/gcc/avr/bin/ -B/g/gnu-gcc/toolchain-avr/objdir/gcc/avr/lib/ -isystem /g/gnu-gcc/toolchain-avr/objdir/gcc/avr/include -isystem /g/gnu-gcc/toolchain-avr/objdir/gcc/avr/sys-include    -c -g -w -O2 -g0 -DWIN32  conftest.c
g:/gnu-gcc/toolchain-avr/gcc-build/gcc/as: line 106: exec: -m: invalid option
exec: usage: exec [-cl] [-a name] file [redirection ...]

这是我相信生成日志的 gcc-build/gcc/libgcc/config 部分。

# Provide some information about the compiler.
$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
set X $ac_compile
ac_compiler=$2
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

cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h.  */

此时,我不知道该去哪里寻求帮助。 Arduino 人员一直没有回应,而且我对 autoconf 的了解不够,无法在 autoconf.ac 文件中查找问题,或者在为应用程序生成 ./config 的 autoconf 代码中查找问题,或者在 MC 宏中查找问题。

在 automake 工具目录中扫描“exec”得到了无数次点击,其中没有一个选项看起来像被添加到“exec somes...”中。但我对 M4 一无所知,并且害怕学习如何调试 .ac 文件。

请提出建议?

答案1

日志足以告诉您要查看的位置。as由于执行配置脚本中的第 3389 行,错误消息来自汇编器:

configure:3389: /g/gnu-gcc/toolchain-avr/gcc-build/./gcc/xgcc -B/g/gnu-gcc/toolchain-avr/gcc-build/./gcc/ -B/g/gnu-gcc/toolchain-avr/objdir/gcc/avr/bin/ -B/g/gnu-gcc/toolchain-avr/objdir/gcc/avr/lib/ -isystem /g/gnu-gcc/toolchain-avr/objdir/gcc/avr/include -isystem /g/gnu-gcc/toolchain-avr/objdir/gcc/avr/sys-include    -o conftest -g -w -O2 -g0 -DWIN32   conftest.c
g:/gnu-gcc/toolchain-avr/gcc-build/gcc/as: line 106: exec: -m: invalid option

汇编器是基于一个文本文件执行的,如果您打开详细选项(通过编辑配置脚本,添加-v到编译器标志)。在您的示例中,可能是这一行:

(eval "$ac_compiler $ac_option >&5") 2>conftest.err

你可以修改为

(eval "$ac_compiler -v $ac_option ->&5") 2>conftest.err

发现这一点后,您可能会发现问题所在。

xgcc我们似乎正在讨论的程序是作为gcc构建的一部分构建/链接的gcc。该程序将显示给定选项的可用选项--help(请参阅源代码)。

答案2

问题是没有可用的“as”,因此 as 的 -march 参数变成了 exec 的 -m 。

为目标构建并安装 binutils,一切都应该很好!

相关内容