0

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);
    ...
}

{metadata_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

一方が他方を表示するには、2 つのファイルをリンクする必要があります。

プロのヒント: 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 に答える