armv7中生成的ELF文件,armv6中的.o文件,同时使用-march = armv6,为什么?

问题描述 投票:1回答:1

我正在尝试将程序编译为armv6,但是即使我使用-march=armv6选项,ELF文件仍是为armv7构建的。所有.o文件都已编译为armv6,只有ELF文件错误。

基本上我是这样编译的:

arm-linux-gnueabihf-g++ -static -march=armv6 -mfpu=vfp -mfloat-abi=hard -marm -Wa,-march=armv6 -o "Bridge"

检查所有.o文件,我得到了:

$ readelf -a -W Bridge.o | grep Tag Tag_CPU_name: "6" Tag_CPU_arch: v6 Tag_ARM_ISA_use: Yes Tag_THUMB_ISA_use: Thumb-1 Tag_FP_arch: VFPv2 Tag_ABI_PCS_wchar_t: 4 Tag_ABI_FP_denormal: Needed Tag_ABI_FP_exceptions: Needed Tag_ABI_FP_number_model: IEEE 754 Tag_ABI_align_needed: 8-byte Tag_ABI_align_preserved: 8-byte, except leaf SP Tag_ABI_enum_size: int Tag_ABI_VFP_args: VFP registers Tag_ABI_optimization_goals: Aggressive Speed Tag_CPU_unaligned_access: v6

但是检查ELF文件:

$ readelf -a -W Bridge | grep Tag Tag_CPU_name: "7-A" Tag_CPU_arch: v7 Tag_CPU_arch_profile: Application Tag_ARM_ISA_use: Yes Tag_THUMB_ISA_use: Thumb-2 Tag_FP_arch: VFPv3 Tag_Advanced_SIMD_arch: NEONv1 Tag_ABI_PCS_wchar_t: 4 Tag_ABI_FP_rounding: Needed Tag_ABI_FP_denormal: Needed Tag_ABI_FP_exceptions: Needed Tag_ABI_FP_number_model: IEEE 754 Tag_ABI_align_needed: 8-byte Tag_ABI_align_preserved: 8-byte, except leaf SP Tag_ABI_enum_size: int Tag_ABI_VFP_args: VFP registers Tag_CPU_unaligned_access: v6

我正在使用Linaro GCC 7.2.1,并且我还尝试了旧版本以及不同的编译标志组合。有人可以告诉我如何编译armv6 ELF文件吗?

gcc arm g++ cross-compiling armv6
1个回答
0
投票

发现问题。Linaro工具链二进制文件能够为armv6平台编译目标文件,但是,链接程序实际上并未解释该标志。

原因:工具链是使用armv7配置编译的。

解决方案:我下载了Linaro工具链的源代码,将其配置为支持armv6,并使用cross-ng-tool对其进行了编译。

© www.soinside.com 2019 - 2024. All rights reserved.