我在文件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和priority.h,也更改了Makefile。

我对C编程的经验很少。

最佳答案

链接器无法寻址函数get_token,因为它似乎是在文件scanner.c中定义的,该文件未传递给编译器。您的包含文件可能只是声明了此函数(即提供没有主体/实现的函数原型)。

您可能会写:

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

09-07 09:55