执行make all编译C项目出现Relocations in generic ELF (EM: 62)错误如何解决
错误原因与排查修复指南
你遇到的
Relocations in generic ELF (EM: 62)、error adding symbols: File in wrong format报错核心原因是链接过程中混用了不同架构的目标文件/二进制库,链接器无法识别非对应架构的二进制文件。其中EM:62是ELF规范里定义的x86_64架构标识,说明当前编译流程中存在架构不匹配的问题,和gcc本身安装状态无关。
排查步骤
- 第一步先清理历史编译缓存:执行
make clean删除所有之前生成的*.o目标文件、.a静态库、.so动态库以及最终可执行文件,清理完成后重新执行make all测试,大部分跨设备迁移项目的缓存问题这一步即可解决。 - 若清理后仍报错,检查所有二进制文件的架构:对项目目录下的所有.o文件、依赖的第三方库执行
file <文件名>命令,比如file main.o,查看输出的ELF架构标识是否统一。 - 检查当前工具链的默认架构:分别执行
gcc -v、ld -v,查看输出中的Target字段,确认工具链的目标架构和所有二进制文件的架构一致。 - 检查Makefile配置:查看Makefile中是否存在强制指定架构的参数(比如
-m32强制32位编译)、或者交叉编译链前缀配置(比如arm-linux-gnueabihf-gcc),确认配置和当前设备环境匹配。
修复方案
- 历史缓存导致的问题:清理缓存后重新编译即可。
- 依赖库架构不匹配:重新编译第三方依赖库为和当前工具链一致的架构,或者安装对应架构的依赖包。
- Makefile配置错误:删除错误的架构强制参数,或者修改交叉编译链前缀为当前设备对应的值。
- 需要跨架构编译的场景:安装对应目标架构的交叉编译工具链,确认Makefile中交叉编译配置正确。
内容的提问来源于stack exchange,提问作者SitarHero
相关产品推荐
相关产品推荐

