我在尝试编译ARM Cortex-M4的某些代码时遇到以下错误 使用
gcc -mcpu=cortex-m4 arm.c
`-mcpu=' is deprecated. Use `-mtune=' or '-march=' instead.
arm.c:1: error: bad value (cortex-m4) for -mtune= switch
我关注GCC 4.7.1 ARM options。不确定我是否缺少一些关键选项。任何使用GCC for ARM的kickstart也会非常有用。
答案 0 :(得分:4)
正如starblue在评论中暗示的那样,该错误是因为您使用的是为x86 CPU编译而构建的本机编译器,而不是用于编译ARM的交叉编译器。
GCC仅支持任何给定编译器二进制文件中的单一通用体系结构类型 - 因此,尽管GCC的相同副本可以为32位和64位x86机器编译,但是无法编译为x86和ARM使用相同的GCC副本 - 您需要一个特定于ARM的GCC。
(正如auselen建议的那样,获得一个预先构建的工作将为您节省大量工作,即使您只是将其作为起点设置的起点。您需要拥有GCC,binutils和至少是一个C库,这些都是预先构建的版本已经完成组合工作的独立开源项目。我会推荐Sourcery CodeBench Lite,因为那是我公司制作的那个,我确实认为这是一个相当不错的。)
答案 1 :(得分:0)
由于错误消息显示-mcpu已弃用,您应该使用其他选项。但是,“ deprectated ”仅仅意味着可能无法继续使用它;它仍然有用。
ARM Cortex-M4是ARM体系结构V7E-M,因此您应该使用-march=armv7-m
(文档没有明确列出armv7e-m
,但自上次更新文档以来可能已添加了该文档。 E
本质上是M3和M4之间的区别 - DSP指令,因此编译器不会生成利用这些指令的代码。使用ARM的Cortex-M DSP库可能是使用这些指令获益的最佳方式您的应用程序。如果您的部件有FPU,那么将需要其他选项来启用代码生成。
答案 2 :(得分:0)
与其他人已经指出的一样,您正在为主机使用编译器,而您需要一个编译器来为目标处理器生成代码(交叉编译器)。像@Brooks建议的那样,你可以使用预先构建的工具链,但是如果你想推出自己的交叉编译器libc和binutils,有一个很好的工具叫Crosstool-NG。它极大地简化了构建为特定处理器生成代码而优化的交叉编译器的过程,因此您不会遇到通用的预构建工具链,它通常为一系列兼容处理器构建代码(例如,您可以调整工具链为特定目标生成ASM,或者为处理器专用的硬件FPU生成浮点代码,而不是仅使用默认为大多数预先构建的工具链的软件浮点例程。