这个问题实际上可能是关于从哪里获得帮助,而不是针对问题本身的帮助。啰嗦请见谅!
我正在尝试构建 gcc 以在 Win32 上运行并为 AVR 生成代码。我从 Arduino 人员使用的文件开始构建他们的 AVR 工具链。
在 Windows 机器上,Atmel 使用 GCC 4.9.2 来由 Arduino 人员构建他们当前的工具链(然后复制/修补),我安装了一个具有 4.9.2 版 GCC 的 MinGW 系统,下载了Arduino人的工具链源码并按照他们的指示进行操作(当然我不小心弄错了什么,或者类似的事情?)。
./configure
autoconf 的阶段(实际上)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,一切都应该很好!