链接器大喊我的其他文件中的函数没有定义

时间:2017-12-04 22:16:13

标签: c makefile include

我在文件int get_token();中定义了一个函数scanner.c,我在头文件scanner.h中声明了它。现在我将此头文件包含在另一个名为precedence.h的标头中,最后我在precedence.h文件中包含precedence.c,我想调用我的函数get_token();

当我调用此函数时,调用make会抛出以下错误:

gcc precedence.c t_stack.c -o expr
/tmp/ccNgwuFu.o: In function `main':
precedence.c:(.text+0x730): undefined reference to `get_token'
collect2: error: ld returned 1 exit status
Makefile:8: recipe for target 'expr' failed
make: *** [expr] Error 1

这是我的Makefile

CC=gcc
CFILES=precedence.c t_stack.c
HFILES=precedence.h t_stack.h token.h error.h

all: expr

expr: $(CFILES) $(HFILES)
    $(CC) $(CFILES) -o $@

我尝试过包括scanner.h和precedence.h,也改变了Makefile。

我对C编程经验不足。

1 个答案:

答案 0 :(得分:1)

链接器无法解决函数get_token,因为它似乎在文件scanner.c定义,而不是传递给编译器。你的包含文件可能只是声明这个函数(即提供没有body / implementation的函数原型)。

你可能会写:

gcc precedence.c t_stack.c scanner.c -o expr