我在文件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编程经验不足。
答案 0 :(得分:1)
链接器无法解决函数get_token
,因为它似乎在文件scanner.c
中定义,而不是传递给编译器。你的包含文件可能只是声明这个函数(即提供没有body / implementation的函数原型)。
你可能会写:
gcc precedence.c t_stack.c scanner.c -o expr