Linux环境下使用Lex和Yacc编译解析程序时出现/usr/bin/ld: cannot find -ly错误的解决求助
解决Lex/Yacc编译时
cannot find -ly的错误 我之前也碰到过一模一样的问题,这个错误的核心是链接器找不到Yacc对应的库文件liby.a或liby.so,下面给你几个可行的解决思路:
1. 确认系统中Yacc的实际替代工具
很多Linux发行版并没有预装原生的Yacc,而是用Bison(GNU的Yacc兼容工具)来替代。这时候链接参数-ly就不适用了,需要换成Bison的库参数:
- 修改编译命令为:
gcc -o C_PARSER lex.yy.c y.tab.c -lbison -ll
2. 安装必要的依赖包
如果系统里还没装Flex和Bison(对应Lex和Yacc)的开发包,先安装它们:
- 对于Debian/Ubuntu系列:
sudo apt-get update && sudo apt-get install bison flex - 对于CentOS/RHEL系列:
sudo yum install bison flex - 对于Fedora:
sudo dnf install bison flex
3. 尝试移除-ly参数直接编译
新版本的Bison生成的语法分析器代码,已经内置了原本需要liby库提供的函数,不需要额外链接。你可以试试简化编译命令:
gcc -o C_PARSER lex.yy.c y.tab.c -ll
4. 检查库文件是否存在
如果上面的方法都不行,可以手动检查系统里有没有Yacc/Bison的库:
# 查找liby相关库 find /usr/lib /usr/lib64 -name "liby*" # 查找libbison相关库 find /usr/lib /usr/lib64 -name "libbison*"
如果没有找到对应的库文件,说明依赖包确实没装全,回到步骤2重新安装即可。
内容的提问来源于stack exchange,提问作者Jurca Bg
相关产品推荐
相关产品推荐

