【问题标题】:What is -ffreestanding option in gcc?gcc 中的 -ffreestanding 选项是什么?
【发布时间】:2013-07-15 13:43:11
【问题描述】:

gcc 中的ffreestanding 是什么?它是干什么用的 ?我遇到了以下情况:

gcc -ffreestanding -m32 -c kernel.c -o kernel.o

又不明白,到底是什么意思。

【问题讨论】:

标签: c gcc compilation freestanding


【解决方案1】:

freestanding 环境可能不存在标准库,并且程序启动可能不一定在“main”。选项-ffreestanding 指示编译器不假设标准函数具有它们通常的定义。

默认情况下,GCC 将充当托管实现的编译器,将__STDC_HOSTED__ 定义为 1,并假定使用 ISO C 函数的名称时,它们具有标准中定义的语义。要使其充当独立环境的一致独立实现,请使用选项-ffreestanding。然后它将__STDC_HOSTED__定义为0,并且不对标准库中函数名的含义做任何假设。

更多信息,This 链接可能会有所帮助。

【讨论】:

  • @Dayalrai 我将-ffreestanding 选项与arm-non-eabi-gcc 一起使用:arm-non-eabi-gcc -g -O0 -ffreestanding ......,但我仍然通过调用nm 命令U main 获得主符号,这会产生gdb 的调试错误: Function "main" not defined。我怎样才能避免生成这个mainsymbol
  • 通常,-ffreestanding 用于编译内核。此外,它很少用于编译直接与内核交互而不使用库的应用程序。普通应用程序不会使用-ffreestanding。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-14
  • 1970-01-01
  • 2019-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多