В общем, я уже прочитал следующие статьи, проверил определение "отдельно стоящие / размещенные" в стандарте языка 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 все еще может использоваться после добавления автономной опции?