如何防止GCC传入默认标志?

时间:2009-11-01 02:17:43

标签: linux arm

我正在尝试为ARM架构交叉编译linux。

主机是运行ubuntu-jaunty的X86机器。我从http://ftp.arm.linux.org.uk/pub/armlinux/toolchain/下载了ARM的交叉编译工具链。我下载了2.95.3版本的工具链。

我遇到的问题是GCC本身传递了一些默认标志,导致GCC输出错误:

  

/usr/local/arm/2.95.3/bin/arm-linux-gcc -specs = / home / feroze / wnr834m / marvell_WNR834M / gcc_specs -D__KERNEL__ -I / home / feroze / wnr834m / marvell_WNR834M / linux-88fxx81 -1_1_3_gtk / include -Wall -Wstrict-prototypes -Wno-trigraphs -Os -fno-strict-aliasing -fno-common -DLED_DUAL_COLOR -DFOR_ROUTER -I / home / feroze / wnr834m / marvell_WNR834M / linux-88fxx81-1_1_3_gtk / arch / arm / mach-mv88fxx81 / Soc / gpp / -Uarm -fno-common -pipe -mapcs-32 -D__LINUX_ARM_ARCH __ = 5 -march = armv5 -mtune = arm9tdmi -mshort-load-bytes -msoft-float -Uarm -march = strongarm - DKBUILD_BASENAME = main -c -o init / main.o init / main.c   cc1:-march = switch的坏值(strongarm)   make [1]:*** [init / main.o]错误1   make [1]:离开目录`/ home / feroze / wnr834m / marvell_WNR834M / linux-88fxx81-1_1_3_gtk'

我检查了整个makefile,找不到正在定义 LINUX_ARM_ARCH_5 和-march = armv5的地方。我在makefile中定义了-march = strongarm,但随后它被你的ARMv5定义附加。

因此,我从gcc创建了一个defs文件,将其修改为只有ARMv4的选项,然后通过指定-specs =选项来使用它。但是,这仍然无法解决问题。

有人可以帮忙吗?我该如何解决这个问题?

谢谢!

菲罗兹

3 个答案:

答案 0 :(得分:1)

请务必检查您的环境变量,因为它们可以说服make做意想不到的事情。

如果Makefile包含另一个文件,则可能在调用CFLAGS之前修改CC。您可以在CFLAGS来电之前打印CC的内容吗?

答案 1 :(得分:1)

这不会严格帮助您消除问题,但您可以gcc -dM -E <empty_file.c>gcc -dM -E -x c /dev/null打印出所有预定义#define的列表用于gcc。将-dM与您的-march之类的其他标记结合起来,您就可以找到导致#define问题的原因。

答案 2 :(得分:1)

-march标志在arch/ARM/Makefile中设置,取决于您在配置文件中选择的计算机。如果您不想使用armv5标志,请确保在配置文件中选择正确的体系结构。

您应该假设内核附加的CFLAGS是正确的(如果您的配置没问题),如果您的工具链不支持其中一个,那么您别无选择,只能使用{{3}自己交叉编译工具链。这应该适用于2.95.3

编辑:原始答案
你想要建造什么? 2.95.3工具链相当古老。你应该尝试一个更新的工具链。你可以找到一个预编译的original crosstol script 选择EABI开始。

这不是您问题的直接答案,但如果您正在构建Linux内核,则不需要使用Makefile。如果您能获得更“标准”的工具链,您将获得更多帮助。