繁体   English   中英

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

[英]ELF file generated in armv7, .o files in armv6, while using -march=armv6, why?

我正在尝试将我的程序编译为 armv6,但 ELF 文件是为 armv7 构建的,即使我使用-march=armv6选项也是如此。 所有的.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 文件吗?

问题确定。 Linaro 工具链二进制文件能够为 armv6 平台编译目标文件,但是,链接器实际上并没有解释这个标志。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM