C语言Makefile编译提示undefined reference to `stack_init`报错如何解决
报错原因
- 核心问题出在Makefile的编译规则错误:编译
.o目标文件时没有添加-c参数,gcc -o test.o test.c的实际作用是尝试将test.c直接编译+链接成可执行文件,而非生成仅完成编译、不做链接的目标文件。此时test.c调用的stack_init、stack_push函数实现在stack.c中,链接阶段找不到对应实现,就会报「未定义引用」错误。 - 额外无效配置:Makefile中写了不存在的
file.o、file.c相关规则,你的项目中并没有file.c这个源码文件,属于多余配置。
修复方案
直接替换你的Makefile为如下内容即可:
CC = gcc CFLAGS = -Wall -g # 最终生成的可执行文件名为file file: test.o stack.o $(CC) -o $@ $^ # 编译生成目标文件的通用规则,-c表示只编译不链接 %.o: %.c dslib.h $(CC) $(CFLAGS) -c -o $@ $< # 清理规则,方便删除编译产物 clean: rm -f *.o file
修复后执行make即可正常编译出可执行文件file,执行./file就能运行程序,执行make clean可以清理所有编译生成的中间文件和可执行文件。
内容的提问来源于stack exchange,提问作者donkeykongcodes
相关产品推荐
相关产品推荐

