Попытка компиляции Дает crt1.o / 'start' / неопределенную ссылку на 'main' / сообщение о выходе - PullRequest
1 голос
/ 25 сентября 2011

Я работаю из книги: Сокеты TCP / IP в C и код ее сайта.

Я пытаюсь построить клиент и сервер на основе этих файлов. Моя марка дает много ошибка, связанная с невозможностью найти функции из DieWithMessage.c

Вот оно:

  #include <stdio.h>
  #include <stdlib.h>
  #include "Practical.h"

void DieWithUserMessage(const char *msg, const char *detail) {
  fputs(msg, stderr);
  fputs(": ", stderr);
  fputs(detail, stderr);
  fputc('\n', stderr);
  exit(1);
} 

void DieWithSystemMessage(const char *msg) {
  perror(msg);
  exit(1);
}

Когда я делаю gcc DieWithMessage.c, я получаю следующую ошибку:

/ usr / lib / i386-linux-gnu / gcc / i686-linux-gnu / 4.5.2 /../../../ crt1.o: в функции _start': (.text+0x18): undefined reference to main ' collect2: ld вернул 1 статус выхода

Как мне скомпилировать это самостоятельно, чтобы ошибки перестали происходить при использовании make-файла?

Спасибо за любую помощь.

1 Ответ

5 голосов
/ 25 сентября 2011

Вашему C-коду нужна функция main, если вы собираетесь попробовать ссылку / запустить ее. Это требование для размещенных приложений на C в соответствии со стандартом.

Это сообщение об ошибке указывает на то, что не так. Код времени выполнения / запуска C (CRT) имеет точку входа start, которая устанавливает среду, а затем вызывает ваш main. Поскольку вы не предоставили a main, он жалуется.

Если вы хотите только создать файл объект для последующего связывания с main (см. здесь для одного описания процесса), используйте что-то вроде:

gcc -c -o DieWithMessage.o DieWithMessage.c

(-c - флаг "компилировать, но не связывать"). Затем вы можете связать его позже со своей основной программой с помощью чего-то вроде (хотя есть и другие варианты):

gcc -o myProg myProg.c DieWithMessage.o

Если вы хотите, чтобы заполнитель main позже обновлялся реальным, вы можете добавить в свой код следующее:

int main (void) { return 0; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...