使用yacc开发计算器gcc编译提示undefined reference to `ex'如何解决
错误原因
这是链接阶段的典型报错:undefined reference to 'ex' 说明代码中声明了ex函数,但链接器找不到该函数的实现代码。你的ex函数放在单独的interpreter源文件中,但是执行gcc编译命令时没有把这个文件加入编译列表,因此触发报错。
修复方案
按以下步骤执行编译即可:
- 生成bison相关文件
bison -d -y calc.y
- 生成flex相关文件
flex calc.l
- 编译所有源文件,注意要把存放
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
相关产品推荐
相关产品推荐

