Проблема с заголовком C: #include и "undefined ссылка" - программирование
Подтвердить что ты не робот

Проблема с заголовком C: #include и "undefined ссылка"

Хорошо, я пытался работать с этим в течение самого долгого времени, и я просто не могу заставить его работать правильно. У меня есть три файла: main.c, hello_world.c и hello_world.h. По какой-то причине они, похоже, не компилируются красиво, и я действительно просто не могу понять, почему...

Вот мои исходные файлы. Сначала hello_world.c:

#include <stdio.h>
#include "hello_world.h"

int hello_world(void) {
  printf("Hello, Stack Overflow!\n");
  return 0;
}

Тогда hello_world.h, simple:

int hello_world(void);

И затем, наконец, main.c:

#include "hello_world.h"

int main() {
  hello_world();
  return 0;
}

Когда я помещаю его в GCC, это то, что я получаю:

cc     main.c   -o main
/tmp/ccSRLvFl.o: In function `main':
main.c:(.text+0x5): undefined reference to `hello_world'
collect2: ld returned 1 exit status
make: *** [main] Error 1

Кто-нибудь может мне помочь? Я действительно застрял в этом, но я на 99 процентов уверен, что это действительно простое решение.

4b9b3361

Ответ 1

gcc main.c hello_world.c -o main

Также всегда используйте защиту заголовка:

#ifndef HELLO_WORLD_H
#define HELLO_WORLD_H

/* header file contents go here */

#endif /* HELLO_WORLD_H */

Ответ 2

Вы не включаете hello_world.c в компиляцию.

   gcc hello_world.c main.c   -o main

Ответ 3

Вы не связываетесь с hello_world.c.

Легкий способ сделать это - запустить эту команду компиляции:

cc -o main main.c hello_world.c

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

Ответ 4

Вы должны связать файл объекта, скомпилированный из вашего второго файла .c hello_world.c с вашим main.o

попробуйте это

cc -c main.c
cc -c hello_world.c
cc *.o -o hello_world

Ответ 5

Я думаю, вы забыли связать hello_world.c. Я буду gcc hello_world.c main.c -o main. Если количество файлов меньше, мы можем использовать этот подход, но в более крупных проектах лучше использовать файлы Make или некоторые скрипты компиляции.