이 질문은 실제로 문제 자체에 대한 도움이 아니라 어디서 도움을 받을 수 있는지에 관한 것일 수 있습니다. 장황하게 말한 점을 용서해주세요!
Win32에서 실행하고 AVR용 코드를 생성하기 위해 gcc를 빌드하려고 합니다. 저는 Arduino 직원들이 AVR 툴체인을 구축하는 데 사용하는 파일부터 시작했습니다.
Windows 시스템에서 Atmel은 GCC 4.9.2를 사용하여 Arduino 직원이 현재 툴체인을 구축한 다음 복사/패치를 적용했습니다.GCC 버전 4.9.2를 사용하는 MinGW 시스템, Arduino를 다운로드했습니다.도구 체인 소스 코드그리고 그들의 지시를 따랐습니다.
./configure
autoconf 단계에서는 G:\GNU-GCC\toolchain-avr\gcc\libgcc\configure
(실제로) xgcc.exe라는 Win32 프로그램을 사용하여 gcc를 여러 번 성공적으로 호출한 것으로 보이며 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.ac 파일이나 응용 프로그램에 대해 ./config를 생성하는 autoconf 코드 또는 MC 매크로에서 문제를 찾기에 autoconf에 대해 충분히 알지 못합니다.
"exec"에 대한 automake 도구 디렉토리를 검색하면 셀 수 없이 많은 히트가 발생했지만 그 중 어느 것도 "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
build 의 일부로 빌드/링크 되는 것 같습니다 gcc
. 프로그램은 주어진 옵션에 대해 사용 가능한 옵션을 표시합니다 --help
(참조:소스 코드).
답변2
문제는 사용 가능한 "as"가 없으므로 as에 대한 -march 인수가 exec에 대해 -m이 된다는 것입니다.
대상에 대한 binutils를 빌드하고 설치하면 모든 것이 잘 될 것입니다!