我在memory.c中的get_metadata_record_new(sz)上得到“未定义的对`get_metadata_record_new'的引用”
{memory.c}
#include "metadata_record.h"
bool add_tohashtable(struct memory *mem, char *key_address, size_t sz) {
//Getting the error on this next line
struct metadata_record * metarec = get_metadata_record_new(sz);
...
}
{metatdata_record.h}
#ifndef METADATA_H_
#define METADATA_H_
struct metadata_record {
size_t size;
bool allocated;
};
struct metadata_record *get_metadata_record_new(size_t);
...
#endif /* METADATA_H_ */
我尝试将此定义从metadata_record.c文件复制并粘贴到memory.c的顶部,但错误消失了:
struct metadata_record *get_metadata_record_new(size_t sz) {
...
}
答案 0 :(得分:3)
您必须将两个文件链接在一起才能看到另一个文件。
ProTip:不要写像
这样的Makefilemyprog: file_one.o file_two.o
你会忘记更新它们。此外,这只是一个糟糕的概念。相反,写Makefile就像
OBJECTS = $(patsubst %.c, %.o, $(wildcard *.c))
myprog: $(OBJECTS)
这会不那么频繁地破坏。
答案 1 :(得分:0)
我忘了链接文件(在我的make文件中)。