Ubuntu 20.04.2 LTS下编译Super Mario 64生成32位MIPS可执行文件致执行失败,求助64位编译方案
解决Ubuntu 20.04编译Super Mario 64后无法执行二进制的问题
问题本质
你遇到的核心问题是:默认编译出的Super Mario 64二进制是针对N64主机的MIPS 32位架构,而非你的x86_64 Ubuntu系统。这就是为什么file命令显示它是ELF 32-bit MSB executable, MIPS,且直接执行会提示格式错误——你的x86_64 CPU无法直接理解MIPS指令集。
为什么会生成MIPS文件?
Super Mario 64的原始代码是为任天堂N64主机开发的,该主机使用的是MIPS III架构的CPU。你克隆的官方 decomp 仓库默认配置是编译出N64可执行文件(ROM格式或对应的MIPS ELF),目的是还原原版N64游戏,而非直接在桌面x86系统运行。
解决方案
根据你的需求,有两种可行方案:
1. 使用N64模拟器运行编译后的ROM
这是最直接的方式,因为编译出的sm64.us.bin本身就是标准的N64 ROM文件:
- 安装Mupen64Plus模拟器(Ubuntu官方源提供):
sudo apt update && sudo apt install mupen64plus - 加载ROM运行:
mupen64plus build/sm64.us.bin
2. 编译x86_64原生可执行文件
如果想直接在Ubuntu上运行原生x86_64版本,需要使用支持PC移植的分支:
- 检查你克隆的仓库是否有PC移植分支(比如
sm64pc相关分支),如果没有,可以找专门的SM64 PC移植仓库。 - 切换到PC移植分支后,按照文档指定的编译命令执行,通常会需要指定
TARGET=pc这类参数,例如:
编译完成后,生成的二进制就是x86_64架构的,可以直接在你的Ubuntu系统上执行。make TARGET=pc VERSION=us -j4
额外说明
你之前排查的“64位系统运行32位二进制”思路方向不对——这里的问题不是x86架构的32位/64位差异,而是完全不同的指令集架构(x86_64 vs MIPS)。即使你的系统是64位,也无法直接运行MIPS二进制,除非用QEMU这类跨架构模拟器,但显然N64模拟器更适合运行SM64。
内容的提问来源于stack exchange,提问作者David Chidester
相关产品推荐
相关产品推荐

