如何在Madeira中获取并部署微软VCRuntime:官方指南完整解读
【免费下载链接】MadeiraRun x86-64 Windows PC games on jailed iOS via FEX-Emu + Wine + DXMT项目地址: https://gitcode.com/GitHub_Trending/mad/Madeira
Madeira 是一个让x86-64 Windows PC 游戏在非越狱 iPhone 上运行的开源项目,它把 Wine(ARM64EC)、FEX-Emu 的 x86-64→ARM64 指令翻译和 DXMT 的 D3D11→Metal 转换整合为单个 Mach 进程。但有一个关键文件不会随仓库提供:微软的Visual C++ 运行时(VCRuntime)DLL。本文完整解读官方指南 tools/fetch-vcruntime.md,带你快速获取并正确部署这 12 个运行时文件。🎮
为什么 VCRuntime 不在仓库里?
这是许可问题,不是遗漏:
- 用 MSVC 编译的游戏依赖微软的 Visual C++ 运行时 DLL
- 这些 DLL 是微软授权二进制,只能按微软再分发条款、且保持原样(unmodified)分发
- 它们不受本仓库 GPL-3.0 许可证覆盖,因此已被从仓库历史中彻底移除
THIRD-PARTY-NOTICES.md 中明确写道:app/Madeira/x86_64-vcruntime/*.dll已被 gitignore,必须自行本地提供。早期仓库里曾提交的 12 个副本因签名被截断(属于"已修改"的微软二进制)也被全部清除。
⚠️ 简单说:仓库不给你、也不该给你这些文件——你自己去微软官方渠道拿,一个字节都不要改。
一键获取:12 个必备 DLL 清单
运行时目录 app/Madeira/x86_64-vcruntime/ 期望恰好 12 个文件:
| 文件名 | 文件名 | 文件名 |
|---|---|---|
| concrt140.dll | msvcp140_codecvt_ids.dll | vcruntime140.dll |
| msvcp140.dll | vcamp140.dll | vcruntime140_1.dll |
| msvcp140_1.dll | vccorlib140.dll | vcruntime140_threads.dll |
| msvcp140_2.dll | vcomp140.dll | msvcp140_atomic_wait.dll |
最快获取方法:从官方安装包提取
- 从微软官方渠道下载 x64 再分发安装包
VC_redist.x64.exe(Visual C++ Redistributable 2015-2022) - 它是自解压包,用 7-Zip 解开即可拿到 DLL。macOS 下两条命令搞定:
brew install sevenzip 7zz x VC_redist.x64.exe -o/tmp/vcredist 7zz x /tmp/vcredist/.rsrc/1033/CABINET/*.cab -oapp/Madeira/x86_64-vcruntime- 不同版本的安装包内部目录结构略有差异,目标只是拿到上面 12 个文件,且必须与微软发布的字节级一致(byte-for-byte)。
💡另一种方法:docs/BUILDING.md 还提到,也可以直接从一台正版 Windows 系统的C:\Windows\System32目录复制这 12 个 DLL 过来。
部署步骤:放入正确目录
- 在仓库根目录确认文件夹存在(不存在就新建):
app/Madeira/x86_64-vcruntime/ - 把 12 个 DLL 原封不动放入该目录
- 该目录已在 Xcode 工程中注册为 Bundle 资源,构建时会打包进 App:
- 工程配置见 app/Madeira.xcodeproj/project.pbxproj(
x86_64-vcruntime in Resources) - 重新用
xcodebuild构建并侧载安装即可,游戏存档前缀在重装后保留
红线:不要修改这些文件
微软的再分发授权只覆盖未修改的文件。特别注意:不要剥离 Authenticode 签名——签名被截断的 DLL 就不再是"原样的微软二进制"了。
官方指南提供了一段 Python 校验脚本,检查每个 DLL 是否仍带有签名负载,输出示例:
signed app/Madeira/x86_64-vcruntime/concrt140.dll signed app/Madeira/x86_64-vcruntime/msvcp140.dll出现UNSIGNED就说明文件被动过手脚,需要重新从官方安装包提取。
原理速览:Madeira 如何加载这些运行时
部署完成后你无需任何配置——启动游戏时,WineProcessBridge.m 会自动把这 12 个微软 DLL覆盖(overlay)到 Wine 的 ARM64EC 内置桩之上,让 x86_64 游戏经 FEX 加载微软的真实实现。这与 Proton/Winlator 的做法一致:避免游戏用到完整 C++ 运行时功能(如parallel_for、atomic_wait、<filesystem>)时撞上 Wine 的__wine_unimplemented桩。
🔍 一个有趣的细节:vcruntime140.dll和msvcp140.dll是刻意跳过的例外——它们的异常处理路径(SEH)若经 FEX 桥接会破坏 x86 栈指针,所以这两个保持使用 ARM64EC 原生内置版本,其余 10 个则用微软原版覆盖。
常见问题排查
| 症状 | 可能原因与解决 |
|---|---|
| 游戏启动即崩溃、提示缺少 vcruntime140 | 确认 12 个 DLL 已全部放入x86_64-vcruntime/并重新构建安装 |
| 菜单卡死 / 无闪屏 | DLL 版本过旧或损坏,重新用官方VC_redist.x64.exe提取 |
| 构建提示缺文件 | 该目录被 gitignore,克隆仓库后必须手动补齐,见 docs/BUILDING.md 的"Inputs that are not in the repository" |
总结
- ✅ 从微软官方下载
VC_redist.x64.exe,7-Zip 两行命令提取 - ✅ 12 个 DLL 原样放入 app/Madeira/x86_64-vcruntime/,不修改、不去签名
- ✅ 重新构建安装,Madeira 会在启动游戏时自动完成运行时覆盖
- 📖 更多许可细节见 THIRD-PARTY-NOTICES.md,完整构建流程见 docs/BUILDING.md
完成这一步,你的 iPhone 距离跑起 Thumper 和 ULTRAKILL 又近了一大步。🚀
【免费下载链接】MadeiraRun x86-64 Windows PC games on jailed iOS via FEX-Emu + Wine + DXMT项目地址: https://gitcode.com/GitHub_Trending/mad/Madeira
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考