C++ 将GCC构建为支持多库的ARM交叉编译器

C++ 将GCC构建为支持多库的ARM交叉编译器,c++,gcc,build,arm,C++,Gcc,Build,Arm,我想从源代码构建GCC,作为ARM裸机目标的交叉编译器。具体来说,我需要对这两种体系结构armv4t和armv5te以及softfp的支持,因为它们都缺少合适的FPU 我使用的(相关)标志是 --with-cpu=arm946e-s --with-mode=arm --with-float=soft --enable-interwork --enable-multilib --with-multilib-list=armv4t,armv5te 通过这种方式,我试图实现编译器将使用--with

我想从源代码构建GCC,作为ARM裸机目标的交叉编译器。具体来说,我需要对这两种体系结构
armv4t
armv5te
以及
softfp
的支持,因为它们都缺少合适的FPU

我使用的(相关)标志是

--with-cpu=arm946e-s --with-mode=arm --with-float=soft --enable-interwork --enable-multilib --with-multilib-list=armv4t,armv5te
通过这种方式,我试图实现编译器将使用
--with cpu
选项默认为
armv5te
,并且仍然保持为
armv4t
构建的机会

Binutils构建工作正常,但是在构建gcc的subdir gcc时,多库检查失败,原因是:

For arm946e-s real value is arm946e-s
Error: --with-multilib-list=armv4t,armv5te not supported.
make: *** [Makefile:4356: configure-gcc] Error 1
我查看了如何启用
armv5te
支持,因为使用
arm7tdmi
armv4t
似乎是默认的多库目标,但未找到任何结果。甚至似乎没有一个正确的有效多库目标列表。删除multilib列表生成了
armv4t
armv7-a
multilibs的构建,我不需要支持它们


如何使用
softfp
成功构建两个目标?

TL-DR;没有必要。使用包装器并链接到所需的标准库

对于软浮点和硬浮点,gcc库和生成的代码都会受到影响。对于具有armv4和armv5的系统,相同的编译器始终能够生成相同的代码。此外,生成的对象是相同的ABI。也就是说,它们使用相同的机制传递参数。因此,对象中包含的汇编指令可能以armv4或armv5为目标。如果您使用的是armv5体系结构,您甚至可以链接并运行armv4对象。没有问题,除非代码是次优的

您可以使用armv4和armv5选项构建两次gcc库。保存生成的库。标题将是相同的。构建armv5时,请使用armv5库。使用
-mcpu
-isystem
(如果愿意)和
-L
获得armv5优化库。因此,我将使用armv4构建作为默认版本。当然,这可以通过
-独立的
和gcc-armv5包装器脚本来完成



multilib配置的特殊之处在于,实际的编译器二进制文件可以生成两组序言和尾声。甚至在multilib之前,总是可以使用同一个编译器与
-mcpu
-march
-mtune
生成armv4或armv5代码。只是他们有相同的开场白和结尾。gcc中的指令生成后端始终是multicpu。可能multilib最好命名为multiabi。

--使用multilib list=
只接受
rmprofile
aprofile
,其他任何
armv5te
都不是cortex系列架构,因此这两个配置文件都不能解决问题