代码之家  ›  专栏  ›  技术社区  ›  feroze

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

  •  3
  • feroze  · 技术社区  · 15 年前

    我正试图为ARM体系结构交叉编译Linux。

    主机是一台运行UbuntuJaunty的x86机器。我从下载了一个用于ARM的交叉编译工具链 http://ftp.arm.linux.org.uk/pub/armlinux/toolchain/ . 我下载了工具链的2.95.3版本。

    我遇到的问题是,gcc本身正在传递一些默认标志,这导致gcc随后输出错误:

    /usr/local/arm/2.95.3/bin/arm-linux-gcc-specs=/home/feroze/wn834 m/marvell-wn834 m/gcc-speus-d_内核_u-i/home/feroze/wnr834 m/marvell-wn834 m/linux-88fxx81-1_3_gtk/inc-wal-wstrict原型-wno trigraph-os-os-fno严格混叠-fno-common-idu双色-dfor-rourouter-i/home/feroze/feroze/wnr834 m/wnr834 m/gcc-gcc-d_uuuuuuuuR834M/Marvell_wnr834M/Linux-88fxx81-1_1_3_GTK/arch/arm/mach-mv88fxx81/soc/gpp/-uarm-fno common-pipe-mapcs-32-d_uuu linux_u arm_uu arch_uu=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:BAD VALUE(STRONGARM)for-March=开关 make[1]:***[init/main.o]错误1 make[1]:离开目录`/home/feroze/wnr834m/marvell_wnr834m/linux-88fx81-1_1_3_gtk'

    我查看了整个makefile,找不到任何地方 Linux_arm_arch_5 和-march=armv5正在定义中。我在makefile中定义了-march=strongarm,但随后它会被h armv5定义所附加。

    所以,我从gcc创建了一个defs文件,将其修改为只有armv4选项,然后通过指定-specs=选项来使用它。然而,这仍然不能解决问题。

    有人能帮忙吗?如何解决此问题?

    谢谢!

    费罗兹

    3 回复  |  直到 15 年前
        1
  •  1
  •   shodanex    15 年前

    三月的旗帜插在 arch/ARM/Makefile ,这取决于您在配置文件中选择的计算机。如果不需要armv5标志,请确保在配置文件中选择正确的体系结构。

    您应该假设内核附加的cflags是正确的(前提是您的配置是正确的),并且如果您的工具链不支持其中一个cflags,那么您就别无选择,只能使用 original crosstol script 这应该适用于2.95.3

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

    这不是问题的直接答案,但是如果您正在构建Linux内核,则不需要处理makefiles。如果你能得到一个更“标准”的工具链,你会得到更多的帮助。

        2
  •  1
  •   Mark Rushakoff    15 年前

    这对你没什么帮助 消除 问题,但你可以 gcc -dM -E <empty_file.c> gcc -dM -E -x c /dev/null 打印出所有预定义 #define 为海湾合作委员会。联合 -dM 像你的国旗一样 -march 你也许能找到导致你 α定义 问题。

        3
  •  1
  •   jheddings    15 年前

    一定要检查您的环境变量,因为它们可以说服Make做一些意想不到的事情。

    如果makefile包含另一个文件,它可能正在修改 CFLAGS 之前 CC 被称为。你能把里面的内容打印出来吗 cFLAGS 就在 科科斯群岛 打电话?