C++ 将GCC构建为支持多库的ARM交叉编译器
我想从源代码构建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
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系列架构,因此这两个配置文件都不能解决问题