dotnet/runtime Linux 构建环境搭建指南:依赖清单、交叉编译工具与 Docker 方案详解

发布时间:2026/9/19 12:54:04
dotnet/runtime Linux 构建环境搭建指南:依赖清单、交叉编译工具与 Docker 方案详解 dotnet/runtime Linux 构建环境搭建指南依赖清单、交叉编译工具与 Docker 方案详解【免费下载链接】runtime.NET is a cross-platform runtime for cloud, mobile, desktop, and IoT apps.项目地址: https://gitcode.com/GitHub_Trending/runtime6/runtime导读本文基于 dotnet/runtime 仓库的 linux-requirements.md系统梳理在 Linux 上搭建 .NET 运行时Runtime构建环境的完整方案包括 Debian/Ubuntu、Fedora、Gentoo 等主流发行版的依赖安装清单、CMake 版本兼容性处理、WASM 交叉构建所需的 Clang 版本要求、跨架构/跨平台交叉编译的额外工具以及使用官方 Docker 镜像直接构建的替代路径。读完本文你将能够在自己的 Linux 机器上从零配置好 dotnet/runtime 的构建环境并理解各依赖项在仓库构建流程中的实际作用。两种构建环境方案概述在 Linux 上构建 dotnet/runtime 仓库即dotnet/runtime源码树本仓库的根目录即为其工作区官方文档给出了两条路线在自己的 Linux 机器上直接搭建环境适合需要灵活控制工具链、需要在同一环境中使用其他开发工具的开发者使用官方构建所用的 Docker 镜像利用微软官方预先配置好的构建镜像免去手动安装依赖的繁琐步骤。两种方式各有优劣Docker 方案开箱即用、环境与 CI 一致但灵活性受限自建环境则可自由组合工具链。若你使用的是WSLWindows Subsystem for Linux则直接按照其中所装发行版distro对应的章节操作即可Docker 桌面版在 Windows 上的 Linux 容器同样依托 WSL 运行。硬件底线官方要求最低 1GB 内存已知在 512MB 的虚拟机上构建会失败相关记录见仓库 issues 讨论且建议配置更高否则构建耗时极长。使用辅助脚本一键安装依赖仓库在 eng/common/native/install-dependencies.sh 提供了一个跨发行版的依赖安装脚本可用于 CI 与本地环境# 非 root 用户需要加 sudo eng/common/native/install-dependencies.sh该脚本的核心逻辑如下eng/common/native/install-dependencies.sh若未显式传入 OS 参数会先通过 init-os-and-arch.sh 用uname -s自动探测系统类型与 CPU 架构x64、arm64、riscv64、ppc64le 等读取/etc/os-release中的ID/ID_LIKE字段按发行版分支执行对应的包管理器命令Debian 系debian/ubuntuapt install build-essential gettext locales cmake llvm clang lld lldb liblldb-dev libunwind8-dev libicu-dev liblttng-ust-dev libssl-dev libkrb5-dev pigz cpio ninja-build file并额外调用localedef生成en_US.UTF-8localeFedora/RHEL/Azure Linux/CentOS优先使用tdnf否则退回dnf安装cmake llvm lld lldb clang python curl libicu-devel openssl-devel krb5-devel lttng-ust-devel pigz cpio ninja-build fileAmazon Linuxamzn与 RHEL 系包列表基本一致Alpine使用apk add安装build-base cmake bash curl clang llvm llvm-dev lld lldb-dev krb5-dev lttng-ust-dev icu-dev openssl-dev pigz cpio ninja file。脚本以set -e运行遇到不支持的发行版会直接报错退出。官方建议即使使用脚本也最好手动核对关键依赖尤其是 cmake、clang 版本是否真正满足要求。Debian 与 Ubuntu 的依赖清单以下说明以当前Ubuntu LTS版本为基准撰写。需要安装的包如下包名用途说明build-essential提供 gcc/g 与 make 等基础编译工具链clangC/C 编译器参与 native 组件构建若做 WASM 相关开发需参见下方专节cmake构建系统生成器要求3.26 或更新版本cpio归档工具用于构建过程中解包/打包curl下载构建依赖与工具链git源码版本管理仓库克隆与子模块libicu-devICU 国际化库开发头文件.NET 全球化功能依赖libkrb5-devKerberos 认证库用于 System.Net.Security 等liblttng-ust-devLTTng 用户态跟踪库支撑 .NET 事件跟踪EventPipe相关功能libssl-devOpenSSL 开发头文件TLS 与加密功能依赖lldLLVM 链接器用于 native 构建链接lldbLLVM 调试器用于调试 native 代码llvmLLVM 工具链供编译与工具使用ninja-build高性能构建系统配合 CMake 使用pigz可选并行 gzip 压缩为packssubset 打 tarball 加速python-is-python3让python命令指向 Python 3供仓库内构建脚本使用一次性安装命令非 root 用户加sudoapt install -y cmake llvm lld clang build-essential \ python-is-python3 curl git lldb libicu-dev liblttng-ust-dev \ libssl-dev libkrb5-dev ninja-build pigz cpio版本红线如果你运行的是早于 Ubuntu 22.04 LTS的 Ubuntu或早于 Debian 12的 Debian不要直接用 apt 安装 cmake请按下一节处理。老版本 Ubuntu/Debian 上的 CMake 安装截至文档撰写时Ubuntu 22.04 LTS 的 apt 源中 CMake 只到 3.22更老的 Ubuntu 更低Debian 12 中是 3.25.1均低于仓库要求的3.26无法直接兼容 dotnet/runtime 的构建系统仓库中 native 组件的 CMakeLists.txt 即声明了cmake_minimum_required(VERSION 3.26)eng/native/configurecompiler.cmake 中也有基于CMAKE_VERSION的版本分支逻辑。两条替代安装路径方案一通过 snap 安装新版 CMake# 非 root 用户需要加 sudo snap install cmakesnap 渠道提供比系统源更新的 CMake 版本安装后cmake命令即指向新版。方案二使用 Kitware 官方 APT 源按 Kitware 官方指引添加其 APT feed源地址包含apt.kitware.com随后即可通过apt安装满足 3.26 及以上版本的 CMake。由于仓库无法直接依赖系统源中的旧版本建议优先采用此方案以获得更贴近发行版习惯的包管理体验。WASM 构建所需的 ClangWASMWebAssembly构建对 Clang 的最低要求是 16文档撰写时最新为 18。若使用 Ubuntu 22.04 LTS 或更老版本系统源中的 Clang 版本不足需要额外添加 LLVM 官方仓库# 非 root 用户需要加 sudo add-apt-repository -y deb http://apt.llvm.org/$(lsb_release -s -c)/ llvm-toolchain-$(lsb_release -s -c)-18 main apt update -y apt install -y clang-18命令中的$(lsb_release -s -c)会自动展开为当前发行版代号从而匹配对应的llvm-toolchain-codename-18软件源。另一个现成的环境示例是仓库中的 .devcontainer/Dockerfile它基于mcr.microsoft.com/devcontainers/dotnet镜像并在构建阶段下载执行install-dependencies.sh与init-os-and-arch.sh来完成同样的依赖装配。交叉编译Cross Building的额外工具如果你的目标是从 Linux 交叉编译到其他 CPU 架构如 Arm32、Arm64或其他操作系统如 Alpine、FreeBSD还需要额外安装以下软件包binfmt-support内核 binfmt 机制支持用于执行不同格式的二进制配合 qemu-userdebootstrap构建最小化 rootfscrossrootfs的工具qemuQEMU 模拟器qemu-user-static用户态静态 QEMU用于在 x64 主机上运行 Arm 等架构的二进制。apt install binfmt-support debootstrap qemu qemu-user-static需要强调的是这些包用于构建crossrootfs交叉编译所需的根文件系统而非构建 runtime 本身。仓库在 eng/common/cross/ 目录下提供了build-rootfs.sh、build-android-rootfs.sh、tizen-build-rootfs.sh等脚本以及 arm64、armel、riscv64、x64 等架构子目录配合 toolchain.cmake 完成 crossrootfs 的生成与工具链切换。构建时通过ROOTFS_DIR环境变量指向生成的 rootfs详见本文 Docker 一节从而完成跨架构编译。Fedora 上的依赖安装以下说明以Fedora 40为基准。需要安装的工具链包clangcmakecpiocurlgitkrb5-devellibicu-devellldlldbllvmlttng-ust-develninja-buildopenssl-develpigz可选为packssubset 的 tarball 启用并行 gzip 压缩python一次性安装命令非 root 用户加sudodnf install -y cmake llvm lld lldb clang python curl git \ libicu-devel openssl-devel krb5-devel lttng-ust-devel ninja-build pigz cpio与 Debian 系相比Fedora 的头文件包命名使用-devel后缀如libicu-devel、openssl-devel、krb5-devel、lttng-ust-develPython 直接提供python包名无需python-is-python3这类别名包。Gentoo 上的依赖安装Gentoo 用户可执行如下命令安装核心依赖emerge --ask clang dev-util/lttng-ust app-crypt/mit-krb5即安装 Clang 编译器、LTTng 用户态跟踪库dev-util/lttng-ust与 MIT Kerberos 库app-crypt/mit-krb5。由于 Gentoo 采用源码式包管理Portage其余依赖cmake、ninja、ICU 等通常已在系统中就绪或可通过 USE flag 组合满足仓库官方文档也欢迎社区提交其他发行版/环境的需求说明文档Pull Request。使用 Docker 镜像构建准备 Docker Engine使用 Docker 方案前需先安装 Docker Engine安装二进制与指引见 Docker 官方站点。安装完成后即可按照仓库的 docs/workflow/using-docker.md 文档操作。Docker 方案的优势在于宿主机的操作系统种类不再重要——例如在 Ubuntu 22.04 上可以毫无障碍地使用 Ubuntu 18.04 镜像Windows 上启用 WSL 后同样可运行 Linux 容器。需要注意的是同一个 Docker Daemon 无法同时运行多个不同内核体系的容器如 Linux 容器与 Windows 容器需切换并重启 Docker镜像架构必须与宿主机支持的平台匹配例如 Apple Silicon Mac 可通过 Rosetta 模拟运行 x64 与 Arm64 镜像Linux Arm64 主机可运行 Arm32 镜像Windows 上虽然 Docker 依赖 WSL 运行 Linux 容器但无需进入 WSL 终端任何装有docker命令的 cmd/powershell 终端都可直接操作。官方构建镜像一览以下镜像mcr.microsoft.com/dotnet-buildtools/prereqs前缀是官方 CI 使用的预构建环境其中crossrootfs dir一列对应容器内ROOTFS_DIR应指向的路径主要镜像覆盖绝大多数常规构建场景宿主机 OS目标 OS目标架构镜像 tagcrossrootfs 目录Azure Linux (x64)Alpine 3.17x64azurelinux-3.0-net11.0-cross-amd64-musl/crossrootfs/x64Azure Linux (x64)Ubuntu 18.04x64azurelinux-3.0-net11.0-cross-amd64/crossrootfs/x64Azure Linux (x64)Alpine 3.17Arm32 (armhf)azurelinux-3.0-net11.0-cross-arm-musl/crossrootfs/armAzure Linux (x64)Ubuntu 22.04Arm32 (armhf)azurelinux-3.0-net11.0-cross-arm/crossrootfs/armAzure Linux (x64)Alpine 3.17Arm64 (arm64v8)azurelinux-3.0-net11.0-cross-arm64-musl/crossrootfs/arm64Azure Linux (x64)Ubuntu 18.04Arm64 (arm64v8)azurelinux-3.0-net11.0-cross-arm64/crossrootfs/arm64Azure Linux (x64)Ubuntu 18.04x86azurelinux-3.0-net11.0-cross-x86/crossrootfs/x86扩展镜像针对 Android、RISC-V 等特殊场景宿主机 OS目标 OS目标架构镜像 tagcrossrootfs 目录Azure Linux (x64)Android Bionicx64azurelinux-3.0-net11.0-cross-android-amd64N/AAzure Linux (x64)Android Bionic含 OpenSSLx64azurelinux-3.0-net11.0-android-opensslN/AAzure Linux (x64)Android Bionic含 Dockerx64azurelinux-3.0-net11.0-android-dockerN/AAzure Linux (x64)FreeBSD 14x64azurelinux-3.0-net11.0-cross-freebsd-14/crossrootfs/x64Azure Linux (x64)Ubuntu 18.04PPC64leazurelinux-3.0-net11.0-cross-ppc64le/crossrootfs/ppc64leAzure Linux (x64)Ubuntu 24.04RISC-Vazurelinux-3.0-net11.0-cross-riscv64/crossrootfs/riscv64Azure Linux (x64)Debian sidLoongArchazurelinux-3.0-net11.0-cross-loongarch64/crossrootfs/loongarch64Azure Linux (x64)Ubuntu 18.04S390xazurelinux-3.0-net11.0-cross-s390x/crossrootfs/s390xAzure Linux (x64)Ubuntu 18.04 (Wasm)x64azurelinux-3.0-net11.0-webassembly-amd64/crossrootfs/x64Debian (x64)Debian 13x64debian-13-gcc16-amd64N/AUbuntu (x64)Tizen 9.0Arm32 (armel)ubuntu-22.04-cross-armel-tizen/crossrootfs/armel用 docker run 构建仓库选定镜像后即可通过docker run挂载仓库源码并执行构建脚本。官方示例以 Azure Linux 镜像交叉编译 x64 目标为例docker run --rm \ -v RUNTIME_REPO_PATH:/runtime \ -w /runtime \ -e ROOTFS_DIR/crossrootfs/x64/ \ mcr.microsoft.com/dotnet-buildtools/prereqs:azurelinux-3.0-net11.0-cross-amd64 \ ./build.sh -s clr --cross -c Checked逐项拆解各参数的含义--rm容器运行结束后自动删除-v RUNTIME_REPO_PATH:/runtime将本机仓库克隆目录挂载到容器内/runtime路径-w /runtime容器工作目录设为/runtime-e ROOTFS_DIR/crossrootfs/x64/设置交叉构建所需的环境变量指向容器内预置的 crossrootfsmcr.microsoft.com/dotnet-buildtools/prereqs:azurelinux-3.0-net11.0-cross-amd64要拉取的镜像全名此处即使用 Azure Linux 镜像构建 x64 目标./build.sh -s clr --cross -c Checked在仓库内执行的构建命令——构建Clrsubset、Checked配置并开启交叉编译选项。如果需要进入容器交互式操作例如在同一路径下执行多次不同配置的构建可将末尾的构建命令替换为-it标志即可获得容器内的小型 shell。不过容器内置 shell 的工具非常有限仅够执行基本操作不适合作为日常完整开发环境。构建入口与后续指引完成环境搭建后仓库根目录下的 build.shLinux/macOS与 dotnet.cmdWindows即为统一构建入口-s参数可指定 subset如clr、libraries、mono。更细致的构建、调试与测试工作流可参考docs/workflow/using-docker.mdDocker 工作流完整说明docs/workflow/building/coreclr、libraries、mono 等各 subset 的专项构建文档docs/workflow/debugging/构建产物的调试指南eng/common/native/install-dependencies.sh依赖安装脚本源码可直接阅读确认各发行版的精确包列表。总结无论选择“自建环境”还是“Docker 镜像”关键都在于满足三条硬性要求——CMake ≥ 3.26、WASM 场景下 Clang ≥ 16、交叉构建场景下准备好 binfmt/debootstrap/qemu 与对应的 crossrootfs。对照本文的包清单逐项核对即可快速获得一个可用的 dotnet/runtime 构建环境。【免费下载链接】runtime.NET is a cross-platform runtime for cloud, mobile, desktop, and IoT apps.项目地址: https://gitcode.com/GitHub_Trending/runtime6/runtime创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询