Makefile编译报错求助:listing.o文件格式异常致链接失败如何解决?
问题分析与解决
核心问题
链接器报错listing.o: file format not recognized,说明listing.o不是合法的ELF目标文件,被误当作链接脚本解析后触发语法错误。
可能原因及修复方案
listing.o文件损坏/无效
之前编译listing.cc时可能失败,但生成了空文件或损坏的listing.o。先删除该文件:rm listing.o然后手动单独编译验证:
g++ -c listing.cc -o listing.o查看是否有编译错误,修复
listing.cc或listing.h中的语法问题后重新执行make。Makefile缩进错误
Make要求规则下的命令行必须用Tab键缩进,如果listing.o规则的命令行用了空格,会导致该编译命令根本没执行,listing.o可能是旧的无效文件。检查Makefile,把命令行的空格替换成Tab。listing.o是意外生成的非目标文件
比如之前误操作生成了同名的文本文件。执行cat listing.o查看内容,如果是文本而非目标文件,直接删除后重新make。
验证步骤
先清理所有中间文件,分步排查:
rm -f scanner.o listing.o scanner.c flex scanner.l && mv lex.yy.c scanner.c g++ -c scanner.c g++ -c listing.cc g++ -o compile scanner.o listing.o
哪一步出错就定位哪一步的问题。
内容的提问来源于stack exchange,提问作者Jeannette Adorante
相关产品推荐
相关产品推荐

