Почему функция printf все еще может использоваться после добавления автономной опции - PullRequest
0 голосов
/ 02 января 2019

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

...