C语言 意外的文件结束

33qvvth1  于 2022-12-26  发布在  其他
关注(0)|答案(1)|浏览(129)

我在Ubuntu 18.04.5 LTS中下载了iasl 20190509版本。当我使用“make iasl”命令来构建包时,我得到了这个错误:

$ make iasl 
make[1]: Entering directory 'acpica-unix2-20190509/generate/unix/iasl'
- bison obj/aslcompiler.y
acpica-unix2-20190509/generate/unix/iasl/obj/aslcompiler.y:1.1: error: syntax error, unexpected end of file
mv: cannot stat 'obj/AslCompiler.LLW4kB/y.tab.h': No such file or directory
Makefile:322: recipe for target 'obj/aslcompiler.y.h' failed
make[1]: *** [obj/aslcompiler.y.h] Error 1
make[1]: Leaving directory 'acpica-unix2-20190509/generate/unix/iasl'
generate/unix/Makefile.common:7: recipe for target 'iasl' failed
make: *** [iasl] Error 2

请帮助我修复此错误。
请帮助我建立iasl。

bzzcjhmw

bzzcjhmw1#

解决方案是重试make,但首先要确保构建目录是干净的:

$ make clean && make

以下是我对所发生事情的最佳猜测:
1.尝试构建软件包。
1.该尝试失败,因为以前未安装m4工具。

  1. OP安装了m4,并使用make重新运行构建。
    1.由于所提供的Makefile存在不足,make未尝试再次运行m4。(请参见下文。)因此,对假定由m4生成的文件的处理失败。
    这个软件包依赖于m4通过插入各种组件文件来创建bison的源代码。(Yacc/野牛没有include特性,所以m4是常用的解决方案。)然而,运行m4的命令大致如下(路径简化):
$ m4 aslparser.y > aslcompiler.y

当shell执行这个命令时,它甚至在试图调用m4之前就创建或截断aslcompiler.y,如果结果是找不到m4,或者m4产生了某种错误,那么您将得到一个空的或部分的输出文件。
make目标aslcompiler.y被这个假象所满足,因为make只关心目标的创建晚于其依赖项,所以make的下一个调用继续到下一个步骤(bison aslcompiler.y),该步骤失败,因为aslcompiler.y为空。
Makefile最好编写为使用如下命令:

$ m4 aslparser.y > /tmp/aslcompiler.y && mv /tmp/aslcompiler.y aslcompiler.y

以避免在m4失败时创建目标。当然,这不是您的责任。它可能会作为bug报告给iASL项目。(Makefile已经使用此策略来安全地处理野牛生成的文件,因此它实际上不是什么新东西。)

相关问题