Не удалось скомпилировать Hello World

Извините, если это повторяющийся вопрос, но я не смог найти ответ, который сработал.

Я пишу программу Hello World C впервые за долгое время. Я вполне уверен, что код правильный, но он не скомпилируется.

Запуск MAC OS 10.13.6, и я только что загрузил XCode на прошлой неделе. Программа компилируется в объектный файл, используя

cc -c test.c -o test.o

без проблем. Однако я не могу создать исполняемый файл, используя

cc test.o -o test

Вот код:

#include <stdio.h>
int Main()
{
    printf("Hello World");
    return 0;
}

Когда я иду создавать исполняемый файл, я получаю

Undefined symbols for architecture x86_64:
  "_main", referenced from:
     implicit entry/start for main executable
ld: symbol(s) not found for architecture x86_64

Я предполагаю, что мне нужно добавить некоторые флаги компилятора, но не могу понять, какие именно.


person SteveTake2    schedule 20.01.2019    source источник
comment
int Main() это не то, как вы пишете основную функцию на C.   -  person tkausl    schedule 20.01.2019
comment
Имена в C чувствительны к регистру, и функция точки входа должна называться main, а не Main.   -  person John Bollinger    schedule 20.01.2019
comment
C чувствителен к регистру Main не является основным   -  person Alain Merigot    schedule 20.01.2019
comment
И когда main() не принимает параметров, это int main(void).   -  person Swordfish    schedule 20.01.2019
comment
Помимо нескольких комментариев выше, которые говорят вам, как исправить. Могу поспорить, что ваши инструменты сборки также сказали вам об этом. Не могли бы вы показать дословное полное сообщение об ошибке, которое вы получили? а) Тот, который у вас есть. б) Тот, который вы получаете, когда используете строгие предупреждения и придирчивую настройку инструментов сборки. Начните с -Wall.   -  person Yunnosch    schedule 20.01.2019
comment
Смотрите, он говорит вам, что ищет что-то под названием main, а не Main. Несмотря на то, что _ может сбивать с толку, это должно было напомнить вам об ошибке с заглавными буквами. Чтение сообщений об ошибках действительно лучший первый уровень помощи во всем, что не собирается.   -  person Yunnosch    schedule 20.01.2019
comment
@alk Люди склонны путать ошибки новичков с плохими вопросами.   -  person Yunnosch    schedule 20.01.2019
comment
Спасибо - обратите внимание на корпус, понял   -  person SteveTake2    schedule 20.01.2019


Ответы (1)


Похоже, вы только начинаете свое путешествие по C-коду. Это отличная возможность узнать о c, компиляции и компоновке.

То, что вы написали, может быть прекрасно скомпилировано в объектный файл (содержащий функцию с именем Main()). Однако для ссылки на исполняемый файл, который может запускаться из вашей ОС, вам необходимо определить точку входа, которая, как предполагается, является функцией с именем main (с учетом регистра, как упоминал Джон выше).

Ознакомьтесь с этим ресурсом: http://www.ntu.edu.sg/home/ehchua/programming/cpp/gcc_make.html для объяснения того, что делает компилятор gcc за кулисами.

Вам просто нужно внести пару небольших изменений, чтобы ваш код работал должным образом:

#include <stdio.h>

int main(void) {
    printf("Hello, world!\n");
    return 0;
}
person James McAnanama    schedule 20.01.2019