Почему функция printf все еще может использоваться после добавления автономной опции
В общем, я уже прочитал следующие статьи, проверил определение "отдельно стоящие / размещенные" в стандарте языка gcc, но пока не разрешил свои сомнения.
https://gcc.gnu.org/onlinedocs/gcc/Standards.html
https://gcc.gnu.org/onlinedocs/gcc/C-Dialect-Options.html
Отдельно стоящие GCC и встроенные функции
Я использую размещенный gcc/cygwin в Win7. Я считаю, что сгенерированные файлы.out,.map или.exe одинаковы для разных сборок с -ffreestanding и без -ffreestanding.
файл C (test.c):
#include <stdio.h>
int main(int ac, char **av)
{
printf("test1");
return 0;
}
Командные строки для двух разных сборок перечислены ниже:
gcc test.c -o test1.exe -std=gnu99 -O2 -Wall -Wextra -Wl,-Map,test1.map
gcc test.c -o test2.exe -std=gnu99 -ffreestanding -O2 -Wall -Wextra -Wl,-Map,test2.map
И test1.exe, и test2.exe могут проходить сборку и выводить "test1" при запуске. Но я думал, что при -ffreestanding компиляция может завершиться неудачей из-за того, что "не удается найти заголовок stdio", "не включена стандартная библиотека lib" или "невозможно найти реализацию printf".
Кажется, что даже с опцией -ffreestanding размещенный gcc также не будет работать как автономный gcc.
Кто-нибудь может помочь уточнить это? Почему функция printf все еще может использоваться после добавления автономной опции?