如何在Debian下交叉编译旧版本的GCC?

如何在Debian下交叉编译旧版本的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选项。构建 GCC 工具链阶段可能出现什么问题导致-mcpu=cortex-m0选项失败?

答案1

您的 GCC 似乎没有使用 right as,并且可能也不会使用 right ld;你需要添加

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

到你的./configure线。

您还可能会遇到与 Debian 多架构方法相关的问题,而 GCC 5 并不直接支持这种方法。您最好的选择是下载GCC 5.5 的最后一个 Debian 软件包以源代码形式,并使用它(带有补丁)来构建您的交叉编译器。然后它将使用作为您安装的跨 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。)

相关内容