【发布时间】:2013-07-15 13:43:11
【问题描述】:
gcc 中的ffreestanding 是什么?它是干什么用的 ?我遇到了以下情况:
gcc -ffreestanding -m32 -c kernel.c -o kernel.o
又不明白,到底是什么意思。
【问题讨论】:
标签: c gcc compilation freestanding
gcc 中的ffreestanding 是什么?它是干什么用的 ?我遇到了以下情况:
gcc -ffreestanding -m32 -c kernel.c -o kernel.o
又不明白,到底是什么意思。
【问题讨论】:
标签: c gcc compilation freestanding
freestanding 环境可能不存在标准库,并且程序启动可能不一定在“main”。选项-ffreestanding 指示编译器不假设标准函数具有它们通常的定义。
默认情况下,GCC 将充当托管实现的编译器,将__STDC_HOSTED__ 定义为 1,并假定使用 ISO C 函数的名称时,它们具有标准中定义的语义。要使其充当独立环境的一致独立实现,请使用选项-ffreestanding。然后它将__STDC_HOSTED__定义为0,并且不对标准库中函数名的含义做任何假设。
更多信息,This 链接可能会有所帮助。
【讨论】:
-ffreestanding 选项与arm-non-eabi-gcc 一起使用:arm-non-eabi-gcc -g -O0 -ffreestanding ......,但我仍然通过调用nm 命令U main 获得主符号,这会产生gdb 的调试错误: Function "main" not defined。我怎样才能避免生成这个mainsymbol
-ffreestanding 用于编译内核。此外,它很少用于编译直接与内核交互而不使用库的应用程序。普通应用程序不会使用-ffreestanding。