news 2026/10/12 16:46:08

从零编译Sunrise:Windows MSBuild与Linux xwin交叉编译完整教程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
从零编译Sunrise:Windows MSBuild与Linux xwin交叉编译完整教程

【免费下载链接】Sunrise

Destiny 2 Offline Preservation Mod

项目地址:https://gitcode.com/gh_mirrors/sunrise16/Sunrise
点击查看免费下载

Sunrise 是一个让《Destiny 2》可以离线游玩的开源 Mod,支持加载任意目的地、脚本化任务、飞行/穿墙等探索功能以及持久存档。本教程带你从零开始,在 Windows 上用 MSBuild 构建、在 Linux 上用 xwin 交叉编译 Sunrise,覆盖环境准备、完整编译命令和常见问题排查,帮助新手一次性构建成功。

Sunrise 是什么?项目代码结构一览

Sunrise 以 DLL 形式注入游戏进程运行,入口是 Sunrise/src/dllmain.cpp。整体代码分为三大块:

模块路径职责
客户端Sunrise/src/client/钩子、UI(ImGui)、内容解析、场景注入
服务端Sunrise/src/server/本地模拟的游戏服务端逻辑、活动调度
中间件Sunrise/src/middleware/加密、协议编解码、BAP 帧处理

💡 项目声明所有游戏数据均在运行时提取,仓库内不包含任何游戏资源,这也是它可以直接开源编译的原因。

编译前准备:环境与工具链清单

两条路线共用的硬性要求(见 CMakeLists.txt 第 1 行的最低版本声明):

  • CMake3.31+(cmake_minimum_required(VERSION 3.31))
  • 代码为C++20
  • 目标系统:x64 Windows

Windows 路线

  • Visual Studio 2026,安装Desktop development with C++工作负载
  • 确认勾选v145 工具集和10.0.26100 Windows SDK(安装器里要同时选中这两项)

Linux 路线

安装以下工具(Debian/Ubuntu 用apt install,Fedora 用dnf即可):

git cmake clang ninja llvm xwin

⚠️ Linux 交叉编译走的是 clang-cl + lld 工具链,不需要安装完整的 MSVC,只需要 xwin 提供的 Windows 头文件和库。

Windows 一键构建:MSBuild 最快配置方法

第 1 步:克隆仓库

git clone https://gitcode.com/gh_mirrors/sunrise16/Sunrise cd Sunrise

第 2 步:图形界面构建(最简单)

直接用 Visual Studio 打开 Sunrise/Sunrise.sln,选择Release + x64配置,点击生成即可。

第 3 步:命令行构建(适合 CI/脚本)

打开Developer PowerShell for VS 2026,执行:

msbuild Sunrise.sln /m /p:Configuration=Release /p:Platform=x64

参数说明:

  • /m:多核并行编译,大幅缩短构建时间
  • /p:Configuration=Release:发布配置
  • /p:Platform=x64:64 位平台

Linux 三步交叉编译:xwin 工具链完整指南

Linux 编译的核心思路:用 linux-to-win-toolchain.cmake 指定clang-cl编译器、lld-link链接器,并指向 xwin 缓存的 Windows SDK,从而在 Linux 上产出 Windows 可执行的 DLL。

第 1 步:下载 Windows 头文件

xwin --sdk-version 10.0.26100 --accept-license splat --include-debug-libs --output .xwin-cache

这会创建一个.xwin-cache目录,内含 Windows SDK(10.0.26100)与 UCRT 运行时库,后续构建全部从该目录取用。

第 2 步:CMake 配置

cmake -B build -G Ninja -DCMAKE_TOOLCHAIN_FILE=$(pwd)/linux-to-win-toolchain.cmake -DCMAKE_BUILD_TYPE=Release

第 3 步:执行构建

cmake --build build

构建完成后,产物位于build/x64/Release/目录。

构建产物说明:最终得到什么文件

无论哪条路线,最终产物都是一个名为steam_api64.dll的共享库——CMake 中它被定义为 SHARED 目标(CMakeLists.txt 第 35–39 行),嵌入的 SQLite、Lua、资源脚本等一并打包其中(资源清单见 Sunrise/resources/sunrise.rc)。

将steam_api64.dll安装到旧版本游戏客户端即可离线游玩。详细的安装与玩法说明可参考仓库 README.md 的 Building 章节(README.md#L43-L85)。

常见问题 FAQ:编译失败怎么办

Q1:CMake 报错版本过低?Linux 发行版自带的 CMake 常为 3.2x,请升级到 3.31+,或从 CMake 官方获取新版二进制。

Q2:Windows 下提示找不到 v145 工具集或 SDK 10.0.26100?回安装器确认 "Desktop development with C++" 工作负载中,C++ CMake tools之外还需手动勾选 v145 工具集与对应 SDK 版本。

Q3:Linux 构建找不到.xwin-cache?工具链文件写死缓存路径为仓库根目录下的.xwin-cache(linux-to-win-toolchain.cmake 第 10 行),确认 xwin 命令的--output参数与之一致,且在仓库根目录执行 cmake。

Q4:交叉编译后 DLL 在 Windows 上报缺少 VC 运行时?项目使用静态运行时链接(/MT,见 CMakeLists.txt 第 41–43 行),正常情况下无需安装 VC 运行时;若用 Debug 配置则需带 Debug 的运行时。

总结

  • Windows 用户:装好 VS 2026(v145 + SDK 10.0.26100),一条msbuild命令搞定
  • Linux 用户:xwin 拉取 SDK → CMake 配置 → Ninja 构建,三步完成交叉编译
  • 两条路线产出相同的steam_api64.dll,功能完全一致

现在你已经掌握了 Sunrise 从零编译的完整流程,接下来就可以深入 Sunrise/src/client/content/ 的 Activity SDK 源码,尝试为这个离线 Mod 添加属于自己的功能了 🚀

【免费下载链接】Sunrise

Destiny 2 Offline Preservation Mod

项目地址:https://gitcode.com/gh_mirrors/sunrise16/Sunrise
点击查看免费下载

相关推荐

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/12 16:42:01

Codex智能体全场景自动化:从代码补全到工程闭环执行

最初接触到Codex智能体,是在一次工期紧张到想掀桌的任务里:要把某个老项目的工具函数拆到独立模块,顺带修掉一堆历史遗留的边界问题。我当时只是抱着试一试的心态,把需求丢给智能体,结果它自己列计划、逐个文件修改、跑…

作者头像 李华
网站建设 2026/10/12 16:40:20

微分游戏开源:自动微分游戏引擎原理、编译与参数辨识实战

简介:微分游戏(difgames)开源项目面向博弈论、控制理论与动态优化方向的研究者与开发者,聚焦连续时间动态系统与博弈论的交叉问题,核心在于利用哈密顿-雅可比-贝尔曼-伊萨克斯(HJBI)方程求解多决…

作者头像 李华
网站建设 2026/10/12 16:37:21

从动作游戏宏设置到模拟器调优:输入与渲染的底层逻辑

最近在玩家群和论坛里看到的几个高频话题,恰好都让我手痒:一是《仁王3》的情报出来之后,群里讨论得最热闹的居然不是难度设计,而是宏设置;二是《浪人崛起》和《战神3》这两款新旧动作游戏,总有人拿着各种模…

作者头像 李华
网站建设 2026/10/12 16:36:04

RPM与DEB打包完全指南:格式差异、实战示例与避坑技巧

简介:RPM与DEB是Linux世界两大主流软件包管理体系,分别广泛用于RHEL/Fedora/CentOS和Debian/Ubuntu等发行版。文档系统梳理了两类软件包的完整打包流程,从目录结构搭建、control文件及spec文件编写,到preinst/postinst/prerm/post…

作者头像 李华