CentOS 7虚拟机安装NNTP阅读器tin时执行make build触发parsdate.y报错怎么办
报错根本原因
你遇到的构建错误核心是Make流程在处理Yacc语法源文件时的依赖判断错位:
正常构建parsdate.o的标准链路是:
- 调用系统安装的
bison/yacc语法解析工具,读取parsdate.y源文件,生成可被gcc编译的parsdate.c中间文件 - 调用gcc编译生成的
parsdate.c,产出目标文件parsdate.o
从报错日志可以判断,当前流程完全跳过了bison解析步骤,直接把纯文本格式的parsdate.y源码当成shell脚本逐行执行——这才会出现把文件头注释当shell命令运行、报fg: no job control、active.c: command not found这类和编译逻辑完全无关的shell执行错误。
对应修复步骤
按顺序执行以下操作即可解决问题:
- 安装缺失的语法解析构建依赖:CentOS 7最小化安装默认不会预装bison/flex,依赖缺失会直接导致make的解析规则失效,执行以下命令安装:
sudo yum install -y bison flex - 清理之前中断构建留下的异常中间文件:如果之前构建过程中断,可能在src目录下残留权限异常的
parsdate可执行文件、空的parsdate.c文件,这些残留会打乱make的依赖判断,让系统误以为解析步骤已经完成。回到源码根目录执行清理:cd ~/tin-2.4.5 make distclean - 重新执行完整构建流程:清理完成后按顺序运行配置、构建命令,不要跳步:
./configure make build
注意:不要在构建前手动修改src目录下.y后缀源文件的可执行权限,也不要手动提前生成parsdate.c,这类操作都会触发make的依赖判断错位,引发同类报错
内容的提问来源于stack exchange,提问作者Darren Matheson
相关产品推荐
相关产品推荐

