gpt4 book ai didi

c - 我无法弄清楚为什么在我的头文件中调用方法时出现 undefined reference 问题

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:35:27 24 4
gpt4 key购买 nike

当我调用其他文件 (memalloc.c) 的 header 中定义的方法时,我的测试文件 (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

我非常确定我的 header 正在调用“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

最佳答案

当您链接您的程序时,您必须在 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

关于c - 我无法弄清楚为什么在我的头文件中调用方法时出现 undefined reference 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34101003/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com