Я пытаюсь написать make-файл, который проходит пошаговую компиляцию, проблема находится на четвертом шаге, связывание.
Программа состоит из нескольких файлов, начиная с main.c:
#include "file1.h"
#include "file2.h"
int main() {
printout1("Print one");
printout2(5);
return 0;
}
file1.h
#include <stdio.h>
void printout1(char *str);
file1.c
#include "file1.h"
void printout1(char *str) {
printf("%s\n", str);
}
file2.h
#include <stdio.h>
#include "file1.h"
void printout2(int);
file2.c
#include "file2.h"
void printout2(int val) {
printf("%d\n", val);
printout1("Print two");
}
Я пытаюсь скомпилировать эту программу со следующим make-файлом:
all:
cpp main.c main.i
gcc -S main.i
as -o main.o main.s
ld -o main.o
Произошла следующая ошибка:
ld: warning: cannot find entry symbol _start; defaulting to 00000000004000b0
main.o: in function 'main':
main.c:(.text+0xa): undefined reference to 'printout1'
main.c:(.text+0x14): undefined reference to 'printout2'
makefile:2 recipe for target 'all' failed
make:***[all] Error 1
Я довольно новичок в такого рода вещах, и я знаю, что проблема в заголовочных файлах, я просто не знаю, как включить их в это.