我在文件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