我正在尝试为 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
。)