Подтвердить что ты не робот

Что означает ошибка времени компиляции "Undefined символов для архитектуры x86_64"?

Я пытаюсь запрограммировать класс графа, используя смежный список из примера в моей текстовой книге на С++, и когда я скомпилирую эту команду: Код: g++ -o prog program.cpp ... Я получаю следующую ошибку:

Undefined symbols for architecture x86_64:
  "_main", referenced from:
      start in crt1.10.6.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status

... что в мире это значит? Это может быть проблемой для моего кода, но я чувствую, что это может быть глубже, потому что я получил эту ту же, казалось бы, необъяснимую ошибку для нескольких разных проектов, многие из которых были решены по-разному, и, к сожалению, полностью случайно.

Я где-то читал, что это может быть связано с использованием 32-битных или 64-битных библиотек и что возможно использовать теги -m32 или -m64, но я не уверен, что это применимо здесь, Интересно, что когда я попытался добавить тег -m64, я получил ту же самую точную ошибку, но когда я попытался использовать тег -m32, я получил ту же ошибку, за исключением того, что сказал

Undefined symbols for architecture i386:
  "_main", referenced from:
      start in crt1.10.6.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status

вместо.

В основном я просто хочу знать, что в мире говорит об ошибке. Я использую для отладки ошибок времени компиляции, которые дают определенную строку в коде и т.д., Но я не могу различить ничего подобного. Любые идеи?

Если это помогает, я использую MacBook конца 2008 года с Intel Core 2 Duo (так 64-разрядный), и я запускаю OS X Lion (10.7.2), который, я думаю, является последней версией. Кроме того, я использую gcc версии 4.2.1.

4b9b3361

Ответ 1

При компиляции файла компилятор вызывает компоновщик, который пытается сгенерировать исполняемый файл. Но это невозможно, потому что вы не предоставили функцию с именем main, которая является функцией, которая будет запущена при запуске вашей программы.

Либо вы не хотите запускать компоновщик, потому что хотите скомпилировать несколько файлов отдельно, а затем объединить. В этом случае используйте флаг -c, чтобы сообщить компилятору пропустить этап ссылки.

Или либо вы хотите выполнить скомпилированный файл. Затем вам нужно реализовать функцию main.