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

使用yacc开发计算器gcc编译提示undefined reference to `ex'如何解决

错误原因

这是链接阶段的典型报错:undefined reference to 'ex' 说明代码中声明了ex函数,但链接器找不到该函数的实现代码。你的ex函数放在单独的interpreter源文件中,但是执行gcc编译命令时没有把这个文件加入编译列表,因此触发报错。

修复方案

按以下步骤执行编译即可:

  1. 生成bison相关文件
bison -d -y calc.y
  1. 生成flex相关文件
flex calc.l
  1. 编译所有源文件,注意要把存放ex函数的interpreter源文件(假设文件名为interpreter.c,如果你的文件名不同请自行替换)加入编译参数:
gcc lex.yy.c y.tab.c interpreter.c -o calc3
可选优化:使用Makefile简化编译

如果不想每次手动执行多条命令,可以在项目目录下新建名为Makefile的文件,写入以下内容:

calc3: lex.yy.c y.tab.c interpreter.c
	gcc lex.yy.c y.tab.c interpreter.c -o calc3

y.tab.c y.tab.h: calc.y
	bison -d -y calc.y

lex.yy.c: calc.l y.tab.h
	flex calc.l

clean:
	rm -f lex.yy.c y.tab.c y.tab.h calc3

后续编译直接执行make命令即可自动完成所有编译步骤,执行make clean可以清理所有生成的中间文件和最终程序。

内容的提问来源于stack exchange,提问作者sourav roy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 15:00:05