Я предполагаю, что вы используете * nix машину из вывода, поэтому вам нужно:
cc -c Anna_program.c
Это должно привести к Anna_program.o
. По вашей ошибке файл .o был не похож на этот, но был временным, поэтому ему было присвоено псевдослучайное имя. Флаг -c имеет эффект только компиляции исходного файла и оставляет ссылки, которые создают исполняемый файл, на более поздний срок.
Тогда вы можете сделать:
cc Anna_program.o other_file.o -o Anna_program
И производим исполняемый файл Anna_program
. Если вы не используете компилятор стиля * nix, тогда ваши наборы будут другими, и вам может понадобиться добавить расширение в конец имени выходного файла в последней команде.
Вы можете сделать:
cc Anna_program.c other_file.o -o Anna_program
Что бы объединить два предыдущих шага.
Следует помнить, что cc
(или gcc
) на самом деле не компилятор, а простой менеджер компиляции. Под капотом они запускают другие программы, которые делают разные шаги при сборке ваших программ. По умолчанию cc
будет пытаться взять то, что вы ему дадите, и создать исполняемый файл (a.out), выполнив столько шагов, сколько необходимо, исходя из того, что вы ему дали. Вы можете передать ему флаги, такие как -c
, чтобы указать, что он должен идти только частично (в данном случае компиляция и сборка).
Шаги для C: предварительная обработка (выполняется программой cpp
), компиляция (выполняется cc1
), сборка (выполняется as
) и компоновка (выполняется ld
).
Команда cc
или gcc
решает, что нужно сделать, а затем запускает эти другие программы для этого.