ARM64树莓派执行make命令报错无法打开ld-linux-x86-64.so.2
报错根因
该报错触发逻辑为:ARM64架构的树莓派系统通过binfmt_misc机制尝试执行x86_64架构的二进制程序时,找不到x86_64程序必需的核心动态链接器/lib64/ld-linux-x86-64.so.2。绝大多数场景是Makefile调用了代码仓库内置的x86_64预编译构建组件,或是构建流程中自动拉取了amd64架构的依赖包,和当前树莓派的CPU架构不匹配。
可落地解决方法
- 先定位触发报错的具体程序,执行带调试输出的make命令追踪执行流:
从输出里定位到具体是哪条命令、哪个二进制文件触发了报错,确认该文件的架构:make -d 2>&1 | grep -E 'exec|x86_64|binfmt'
如果输出包含file 你找到的报错二进制文件路径x86-64字段,即可确认是架构不匹配问题。 - 若该程序没有提供ARM64版本,必须跨架构运行,直接安装x86_64转译环境和缺失的依赖库:
- 启用Debian/Ubuntu系统的多架构支持:
sudo dpkg --add-architecture amd64 sudo apt update - 安装x86_64版本的核心C库(包含报错缺失的动态链接器)和qemu用户态转译组件:
sudo apt install libc6:amd64 qemu-user-binfmt - 安装完成后重新执行make命令即可正常运行。
- 启用Debian/Ubuntu系统的多架构支持:
- 优先选择原生ARM64构建链路,从根源避免跨架构问题:
检查Makefile中写死的预编译工具下载地址、仓库内自带的构建二进制,将所有标注为x86_64/amd64的资源替换为aarch64/arm64版本;通用构建工具(gcc、cmake、nodejs、protoc等)直接通过apt源安装ARM64原生版本,替换仓库内的x86预编译文件,构建稳定性和速度都会远高于跨架构转译。 - 若之前手动安装过box64等第三方转译层,执行
update-binfmts --display检查x86_64架构对应的binfmt注册规则是否冲突,删除错误注册的规则后重新配置转译程序即可。
内容的提问来源于stack exchange,提问作者Yacine Manai
相关产品推荐
相关产品推荐

