ffreestanding
在 gcc 中是什么?它的用途是什么?我遇到了以下内容:
gcc -ffreestanding -m32 -c kernel.c -o kernel.o
但是我不理解,它确切的意义是什么。
ffreestanding
在 gcc 中是什么?它的用途是什么?我遇到了以下内容:
gcc -ffreestanding -m32 -c kernel.c -o kernel.o
但是我不理解,它确切的意义是什么。
__STDC_HOSTED__
定义为1,并假定当使用ISO C函数的名称时,它们具有标准中定义的语义。要使其作为遵循自由站点环境的符合实现的编译器,请使用选项-ffreestanding
。然后它将把__STDC_HOSTED__
定义为0,并且不会对标准库中的函数名的含义进行任何假设。arm-non-eabi-gcc
编译器时,加入了 -ffreestanding
选项:arm-non-eabi-gcc -g -O0 -ffreestanding ......
,但是我仍然可以通过调用 nm
命令来获取 U main
主符号,这会导致在使用 gdb
进行调试时出现错误:Function "main" not defined
。请问我该如何避免生成这个 main
符号? - user2948075-ffreestanding
用于编译内核。此外,它很少用于编译直接与内核交互而不使用库的应用程序。普通应用程序不会使用 -ffreestanding
。 - Christian Hujer-ffreestanding
包含作为编译器选项会导致每兆赫兹DMIPS数值下降。因此,在这种情况下最好避免使用它。 - Nee-ffreestanding
编译可能会导致编译代码的性能降低。原因是**-ffreestanding
选项隐式启用了-fno-builtin
**,这意味着您无法从任何标准库函数调用中受益于GCC内置函数的自动替换,例如将memcpy
直接编译成内联复制循环。除了这种设计决策的优点之外,在评估使用-ffreestanding
时,这绝对是应该注意的事情。 - Cody Gray