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

Linux 如何防止GCC传入默认标志?,linux,arm,Linux,Arm,我正在尝试为ARM架构交叉编译linux 主机是一台运行ubuntu jaunty的X86机器。我从下载了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_u内核_uuuuuu-I/home/feroze/wnr834m/

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

主机是一台运行ubuntu jaunty的X86机器。我从下载了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_u内核_uuuuuu-I/home/feroze/wnr834m/marvell_Wnr834;-linux-88fxx81_3_gtk/include-Wall-rict原型-Wno trigraphs-Os-fno严格别名-fno-common-ful双色-dfu-oru路由器-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_-arm-arch=5-march=armv5-mtune=arm9tdmi-mshort load字节-msoft-Uarm-STRONGRONG-DKBUILD-BASENAME=main-c-c-o init/main.o init/main.c cc1:3月份=开关的错误值(strongarm) 生成[1]:***[init/main.o]错误1 make[1]:离开目录“/home/feroze/wnr834m/marvell_wnr834m/linux-88fxx81-1_1_3_gtk”

我检查了整个makefile,找不到任何定义LINUX\u ARM\u ARCH\u 5和-march=armv5的地方。我在makefile中定义-march=strongarm,但随后它会被H ARMv5定义追加

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

有人能帮忙吗?我如何解决这个问题

谢谢


feroze

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


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

这并不能严格帮助您消除问题,但您可以执行
gcc-dM-E
gcc-dM-E-xc/dev/null
打印出所有预定义的
\define
gcc的列表。将
-dM
与另一个标志(如您的
-march
相结合,您可能能够追踪导致
#define
问题的原因。

中设置了-march标志,这取决于您在配置文件中选择的机器。如果不需要armv5标志,请确保在配置文件中选择正确的体系结构

您应该假设附加了内核的cflag是正确的(只要您的配置是正确的),如果您的工具链不支持其中一个,那么您别无选择,只能自己交叉编译一个工具链,使用应该与2.95.3一起使用的

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


这并不是对您的问题的直接回答,但是如果您正在构建linux内核,则不需要处理makefile。如果您可以获得更“标准”的工具链,您将获得更多帮助。

环境变量中没有导致这种情况的因素。我已经查过了。这是基于自动工具的项目吗?“/configure”过程将添加几个它认为是“隐含”或“必需”的标志。我之所以使用2.95.3工具链,是因为我正在为一个相当旧的路由器(Netgear WNR834M)构建linux内核固件。我试着用一个更新的工具链来构建内核源代码,但是我得到了很多编译错误。忘了提到路由器源代码中的linux内核版本是2.4(我想)。我无法用CodeSourcery EABI工具链来编译它。此外,2.95.3版本的工具链不支持设备上的armv5处理器。因此,即使在2.95.3中编译成功,链接器也会失败,因为它找不到一些符号。我将尝试使用您建议的原始crosstool脚本。甚至netgear OSS支持部门也要求我去那里构建一个。