Моя структура каталогов следующая:
Мой дисковод. c, который находится на диске
#include <stdio.h>
#include <stdlib.h>
#include "diskdriver.h"
const int BLOCK_SIZE = 512;
const int NUM_BLOCKS = 4096;
//Reads one block at a time from disk
void readBlock(FILE* disk, int blockNum, char* buffer){
fseek(disk, blockNum * BLOCK_SIZE, SEEK_SET);
fread(buffer, BLOCK_SIZE, 1, disk);
}
//Writes one block at a time to disk
void writeBlock(FILE* disk, int blockNum, char* data){
fseek(disk, blockNum * BLOCK_SIZE, SEEK_SET);
fwrite(data, BLOCK_SIZE, 1, disk);
}
Мой заголовочный файл diskdriver.h:
#ifndef DISKDRIVER_H
#define DISKDRIVER_H
//Reads one block at a time from disk
void readBlock(FILE* disk, int blockNum, char* buffer);
//Writes one block at a time to disk
void writeBlock(FILE* disk, int blockNum, char* data);
#endif /* DISKDRIVER_H */
Я обращаюсь к нему из файла. c, который находится в io
Мой make-файл выглядит так:
CC:=gcc
CFLAGS:=-g -Wall -Werror
TESTFILES := $(wildcard apps/test*.c)
$(info TESTFILES are $(TESTFILES))
TESTS := $(TESTFILES:apps/%.c=%)
$(info TESTS are $(TESTS))
all: $(TESTS) disk.o file.o
test%: apps/test%.c file.o
$(CC) $(CFLAGS) -o apps/$@ $^
disk.o: disk/diskdriver.c disk/diskdriver.h
$(CC) $(CFLAGS) -c -o $@ $<
file.o: io/File.c io/File.h
$(CC) $(CFLAGS) -c -o $@ $<
.PHONY: clean
clean:
rm -rf *.o
find apps -type f -not -name '*.c' -print0 | xargs -0 rm --
однако я получаю сообщение об ошибке:
make all
TESTFILES are apps/test01.c
TESTS are test01
gcc -g -Wall -Werror -c -o file.o io/File.c
gcc -g -Wall -Werror -o apps/test01 apps/test01.c file.o
file.o: In function `initLLFS':
/home/samroy2106/Desktop/CSC360/A3/file_system/io/File.c:34: undefined reference to `writeBlock'
collect2: error: ld returned 1 exit status
Makefile:13: recipe for target 'test01' failed
make: *** [test01] Error 1
Я почти уверен, что это небольшая ошибка, но, похоже, я не могу указать на нее. Заранее большое спасибо:)