데비안에서 이전 버전의 GCC를 어떻게 크로스 컴파일하나요?

데비안에서 이전 버전의 GCC를 어떻게 크로스 컴파일하나요?

x86에서 ARM용 GCC 툴체인의 이전 버전을 구축하려고 합니다.Cortex-M0용 GCC > v5의 버그. 나는 다음 지침을 조합하여 따랐습니다.

그래서 내 전반적인 프로세스는 다음과 같습니다.

# Download GCC-5.5.0 from https://gcc.gnu.org/releases.html
VERSION="5.5.0"
tar xzf gcc-$VERSION.tar.gz
cd gcc-$VERSION
./contrib/download_prerequisites
cd ..
mkdir objdir
cd objdir
../gcc-5.5.0/configure --prefix=$HOME/embedded/gcc-arm-none-eabi-5.5.0 --disable-multilib --enable-languages=c,c++ --target=arm-none-eabi
make -j$(nproc) # use all cores
make install

그런 다음 아래에 다음 파일을 만듭니다 ~/embedded/arm-none-eabi-5.5.0/bin/.

arm-none-eabi-c++  arm-none-eabi-gcc-5.5.0   arm-none-eabi-gcov
arm-none-eabi-cpp  arm-none-eabi-gcc-ar      arm-none-eabi-gcov-dump
arm-none-eabi-g++  arm-none-eabi-gcc-nm      arm-none-eabi-gcov-tool
arm-none-eabi-gcc  arm-none-eabi-gcc-ranlib

그러나 다음 명령은 실패합니다.

arm-none-eabi-gcc -c -mcpu=cortex-m0 -O0 -ggdb (......)

Compiling crt0_v6m.S
as: unrecognized option '-mcpu=cortex-m0'
make: *** [/home/ceremcem/ChibiOS/os/common/startup/ARMCMx/compilers/GCC/rules.mk:253: build/obj/crt0_v6m.o] Error 1

명령이 새로 생성된 바이너리를 사용하는지 확인할 수 있습니다.

$ which arm-none-eabi-gcc
/home/ceremcem/embedded/arm-none-eabi-5.5.0/bin//arm-none-eabi-gcc

이는 새로 컴파일된 GCC 툴체인이 이 mcpu옵션을 허용하지 않음을 의미합니다. -mcpu=cortex-m0옵션이 실패하게 만드는 GCC 툴체인의 빌드 단계에서 무엇이 잘못될 수 있습니까 ?

답변1

귀하의 GCC는 right 를 사용하지 않는 것으로 보이며 아마도 추가 as하지 않을 것입니다.ld

--with-as=/usr/bin/arm-none-eabi-as --with-ld=/usr/bin/arm-none-eabi-ld

당신의 라인에 ./configure.

GCC 5에서 직접 지원하지 않는 Debian의 다중 아키텍처 접근 방식과 관련된 문제가 발생할 수도 있습니다. 가장 좋은 방법은 다운로드하는 것입니다GCC 5.5용 마지막 데비안 패키지소스 코드 형식으로 작성하고 이를 (패치와 함께) 사용하여 크로스 컴파일러를 구축하세요. 그런 다음 설치된 GCC 간 패키지의 종속성으로 설치된 ARM C 라이브러리를 사용합니다.

dget https://snapshot.debian.org/archive/debian-debug/20180412T094604Z/pool/main/g/gcc-5/gcc-5_5.5.0-12.dsc
cd gcc-5-5.5.0
debian/rules patch

그런 다음 이전과 같이 구성하고 빌드합니다. (크로스 빌드 문서는 무시됩니다 debian/README.cross.)

관련 정보