You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 04:36:01