0

我在 memory.c 的 get_metadata_record_new(sz) 上得到“未定义的对 `get_metadata_record_new' 的引用”

{内存.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) {
...
}
4

2 回答 2

3

您必须将两个文件链接在一起才能看到另一个文件。

专业提示:不要像这样编写 Makefile

myprog: file_one.o file_two.o

会忘记更新它们。此外,这只是一个糟糕的概念。相反,像这样写 Makefile

OBJECTS = $(patsubst %.c, %.o, $(wildcard *.c))
myprog: $(OBJECTS)

那会不那么频繁地中断。

于 2012-09-28T20:40:31.823 回答
0

我忘了链接文件(在我的 make 文件中)。

于 2012-09-28T20:38:56.210 回答