You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写shell.nix配置x86_64-darwin到mips-linux-gnu交叉编译环境?

解决M1 Mac(Rosetta2 x86_64-darwin)下Nix交叉编译sm64的环境配置问题

核心问题分析

你遇到的问题本质是Nix交叉编译的平台三元组配置错误:你需要的是运行在x86_64-darwin(构建/主机平台)、针对mips-linux-gnu(目标平台)的交叉工具链,但之前的配置误将主机平台设为了mips-linux-gnu,导致拉取的binutils等工具是MIPS架构,无法在x86_64的Rosetta环境执行。

正确的shell.nix配置方案

直接使用Nix的pkgsCross.mips-linux-gnu来获取针对目标平台的交叉工具链,同时确保工具链本身编译为x86_64-darwin可执行格式:

{ pkgs ? import <nixpkgs> {} }:

pkgs.mkShell {
  # 引入x86_64-darwin构建的、针对mips-linux-gnu的交叉工具链
  buildInputs = with pkgsCross.mips-linux-gnu; [
    binutils
    gcc
    # 构建辅助工具直接从主pkgs拉取(x86_64-darwin架构,可直接执行)
    pkgs.make
    pkgs.python3
  ];

  # 配置环境变量,让sm64构建脚本识别交叉工具链
  shellHook = ''
    export CROSS_COMPILE=mips-linux-gnu-
    export PATH=$PATH:${pkgsCross.mips-linux-gnu.binutils}/bin:${pkgsCross.mips-linux-gnu.gcc}/bin
  '';
}

关键配置说明

  • pkgsCross.mips-linux-gnu是Nixpkgs预定义的交叉编译工具链集合,会自动生成能在当前x86_64-darwin平台运行、输出mips-linux-gnu目标代码的binutils、gcc等工具。
  • 主pkgs下的make、python3属于构建辅助工具,本身是x86_64-darwin架构,直接加入buildInputs即可正常执行,无需放入交叉工具链集合。
  • CROSS_COMPILE环境变量是sm64构建脚本的必填项,用于指定交叉工具的前缀,确保脚本调用mips-linux-gnu-gcc而非系统默认gcc。

验证方法

进入nix-shell后,执行以下命令确认工具链正确性:

# 查看gcc的目标架构,输出应包含mips-linux-gnu
mips-linux-gnu-gcc -v
# 检查工具本身的运行架构,输出应为x86_64
file $(which mips-linux-gnu-gcc)

内容的提问来源于stack exchange,提问作者CrepeGoat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 04:37:38