Ответ 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 */
Хорошо, я пытался работать с этим в течение самого долгого времени, и я просто не могу заставить его работать правильно. У меня есть три файла: 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 процентов уверен, что это действительно простое решение.
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 */
Вы не включаете hello_world.c в компиляцию.
gcc hello_world.c main.c -o main
Вы не связываетесь с hello_world.c.
Легкий способ сделать это - запустить эту команду компиляции:
cc -o main main.c hello_world.c
Более сложные проекты часто используют скрипты сборки или создают файлы, которые разделяют команды компиляции и компоновки, но приведенная выше команда (объединение обоих шагов) должна делать все возможное для небольших проектов.
Вы должны связать файл объекта, скомпилированный из вашего второго файла .c hello_world.c с вашим main.o
попробуйте это
cc -c main.c
cc -c hello_world.c
cc *.o -o hello_world
Я думаю, вы забыли связать hello_world.c. Я буду gcc hello_world.c main.c -o main. Если количество файлов меньше, мы можем использовать этот подход, но в более крупных проектах лучше использовать файлы Make или некоторые скрипты компиляции.