当我调用我的其他文件(memalloc.c)标题中定义的方法时,我的测试文件(memalloc_test.c)中出现以下错误......
gcc memalloc_test.c -o memalloc_test
/tmp/ccvO6oS7.o: In function `main':
memalloc_test.c:(.text+0x1f): undefined reference to `my_mallinfo'
memalloc_test.c:(.text+0x29): undefined reference to `my_malloc'
memalloc_test.c:(.text+0x4d): undefined reference to `my_mallinfo'
memalloc_test.c:(.text+0x6d): undefined reference to `my_free'
memalloc_test.c:(.text+0x81): undefined reference to `my_mallinfo'
memalloc_test.c:(.text+0x9f): undefined reference to `my_malloc'
memalloc_test.c:(.text+0xc8): undefined reference to `my_mallinfo'
memalloc_test.c:(.text+0xd4): undefined reference to `my_free'
memalloc_test.c:(.text+0xe0): undefined reference to `my_free'
memalloc_test.c:(.text+0xf4): undefined reference to `my_mallinfo'
memalloc_test.c:(.text+0x100): undefined reference to `my_free'
memalloc_test.c:(.text+0x10c): undefined reference to `my_free'
memalloc_test.c:(.text+0x120): undefined reference to `my_mallinfo'
memalloc_test.c:(.text+0x12a): undefined reference to `my_malloc'
memalloc_test.c:(.text+0x142): undefined reference to `my_mallinfo'
memalloc_test.c:(.text+0x14e): undefined reference to `my_free'
memalloc_test.c:(.text+0x162): undefined reference to `my_mallinfo'
memalloc_test.c:(.text+0x16c): undefined reference to `my_mallopt'
memalloc_test.c:(.text+0x176): undefined reference to `my_malloc'
memalloc_test.c:(.text+0x18e): undefined reference to `my_mallinfo'
memalloc_test.c:(.text+0x198): undefined reference to `my_malloc'
memalloc_test.c:(.text+0x1b0): undefined reference to `my_mallinfo'
memalloc_test.c:(.text+0x1bc): undefined reference to `my_free'
memalloc_test.c:(.text+0x1d0): undefined reference to `my_mallinfo'
collect2: error: ld returned 1 exit status
我的头文件如下......
//Header
#ifndef MEMALLOC_H
#define MEMALLOC_H
#define BLOCK_SIZE 500
#define NUMBER_POINTERS 10
void* my_malloc(int size);
void my_free(void *ptr);
void my_mallopt(int policy);
void my_mallinfo();
extern char *my_malloc_error();
#endif
我非常确定我的标题是在“memalloc.c”中调用正确命名的方法。目前我的make文件汇编了memalloc,但我手动尝试编译测试,这是我失败的地方。如果它是相关的,这是我的make文件。
CFLAGS = -c -Wall
CFLAGS+= -g
LDFLAGS =
SOURCES= memalloc.c memalloc_test.c memalloc.h
OBJECTS=$(SOURCES:.c=.o)
EXECUTABLE=memalloc
all: $(SOURCES) $(EXECUTABLE)
$(EXECUTABLE): $(OBJECTS)
gcc $(OBJECTS) $(LDFLAGS) -o $@
.c.o:
gcc $(CFLAGS) $< -o $@
clean:
rm -rf *.o *~ memalloc
答案 0 :(得分:2)
据我所知:
gcc memalloc_test.c -o memalloc_test
这一行是将memalloc_test.c编译成一个目标文件,但没有添加memalloc.c的目标文件,这是对这些函数的引用的定义。
答案 1 :(得分:2)
链接程序时,必须在gcc
调用时指定所有相关的目标文件(如果需要,还可以指定库)。但是,在此命令行中,您只指定了一个:
gcc memalloc_test.c -o memalloc_test
你的makefile几乎可以正常工作,但你应该删除SOURCES
行中的头文件,这样看起来像这样:
SOURCES= memalloc.c memalloc_test.c
然后OBJECTS
被分配memalloc.o memalloc_test.o
并且gcc命令将被替换(在替换变量之后):
gcc memalloc.o memalloc_test.o -o memalloc
进一步说明:您可以将可执行文件名称更改为memalloc_test
。