未定义的函数引用 - 包括头文件

时间:2012-09-28 20:35:22

标签: c

我在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) {
...
}

2 个答案:

答案 0 :(得分:3)

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

ProTip:不要写像

这样的Makefile
myprog: file_one.o file_two.o

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

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

这会不那么频繁地破坏

答案 1 :(得分:0)

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