Я пытаюсь скомпилировать программу на C, связывающую два ранее созданных объектных файла, но продолжаю получать ошибку «неопределенная ссылка».
Я использую Visual Code для написания кода и Ubuntu в Windows для компиляциииспользуя make-файл.Оба файла C, task5.c и reverse.c , которые были преобразованы в объектные файлы, содержат операторы #include reverse.h
, которые содержат прототипы для функций в обратном порядке .c .
task5.c
#include <stdio.h>
#include "ctap.h"
#include "reverse.h"
TESTS {
const char *a = "Family";
char *b = reverse(a);
//test 1
ok(string_length(a) == string_length(b), "Strings are the same size");
//test 2
is("ylimaF", b, "Strings match");
}
reverse.c
#include <stdio.h>
#include <stdlib.h>
#include "reverse.h"
char *reverse(const char *str) {
//code
}
int string_length(const char *str) {
//code
}
reverse.h
char *reverse(const char *str);
int string_length(const char *str);
makefile
linked:
gcc -o linked task5.o reverse.o
task5.o
gcc -c -o task5.o task5.c
reverse.o
gcc -c -o reverse.o reverse.c
Когда я запускаю команду make linked
Я ожидаю, что она будет выполнена и ничего не вернет.
Но когда я запускаю эту команду, я получаю эту ошибку:
cc task5.o -o linked
task5.o: In function `ctap_tests':
task5.c:(.text+0x1abe): undefined reference to `reverse'
task5.c:(.text+0x1ace): undefined reference to `string_length'
task5.c:(.text+0x1adc): undefined reference to `string_length'
collect2: error: ld returned 1 exit status
<builtin>: recipe for target 'linked' failed
make: *** [task5] Error 1