新闻详情

新闻详情

首页 / 资讯中心 / 详情

如何逐步构建 Madeira 的 Wine ARM64EC PE 模块:build/wine-pe 构建链完全指南

发布时间:2026/9/30 14:38:00来源:尧图网络
如何逐步构建 Madeira 的 Wine ARM64EC PE 模块:build/wine-pe 构建链完全指南
如何逐步构建 Madeira 的 Wine ARM64EC PE 模块build/wine-pe 构建链完全指南【免费下载链接】MadeiraRun x86-64 Windows PC games on jailed iOS via FEX-Emu Wine DXMT项目地址: https://gitcode.com/GitHub_Trending/mad/MadeiraMadeira 是一个在无越狱 iOS 设备上运行 x86-64 Windows PC 游戏的开源项目它把 WineARM64EC 版本、FEX-Emu 和 DXMT 组合成单一 Mach 进程。本文带你逐步走通build/wine-pe构建链如何编译出 ntdll.dll 等 Wine ARM64EC PE 模块并完成 strip、填充pad后拷贝进 iOS 应用目录。全文面向新手无需提前熟悉 Wine 内部结构。 先搞懂Wine PE 模块在 Madeira 里扮演什么角色Madeira 的 Wine 部分被拆成了两个半边半边产物运行位置unix 侧libntdll_unix.a、libwineserver.a、libwin32u_unix.aiOS 原生代码直接链接进 AppPE 侧ntdll.dll、kernel32.dll等 ARM64EC Windows 动态库以文件形式打包进 App由加载器映射PE 侧正是build/wine-pe构建链的产物。它被放进 app/Madeira/arm64ec-windows/ 目录游戏运行时由 iOS 侧加载器按 PE 文件格式映射。理解这一点很重要ntdll.dll 是整个 x86-64 翻译栈的地基——Windows API 的入口、异常分发、进程/线程语义都靠它所以构建脚本对它的处理比其它模块更严格。 为什么要 ARM64ECARM64EC 让 Windows 代码以 x64 的位宽模型运行在 ARM64 硬件上配合 FEX-Emu 的 x86-64→ARM64 翻译游戏代码无需 32 位兼容层性能损失最小。✅ 构建前置条件工具链与子模块一次备齐在动手之前确认三样输入都就位详见 docs/BUILDING.md 的输入清单llvm-mingw 工具链放在toolchains/llvm-mingw-20260421-ucrt-macos-universal/约 122 MB仓库中不含此工具链需要从 mstorsjo/llvm-mingw 的 20260421 版本 tarball 解压获取。构建脚本会自动把它的bin目录加进 PATH。wine 子模块位于wine/目录必须指向分支madeira-lgpl的 fork上游 Wine 无法直接构建本项目。注意FEX、wine、research/dxmt三个子模块都指向包含 iOS 移植工作的 fork。递归克隆仓库git clone --recurse-submodules https://gitcode.com/GitHub_Trending/mad/Madeira⚠️ 提醒Microsoft Visual C 运行时 DLL 不在本仓库分发范围内需要按 tools/fetch-vcruntime.md 自行准备。 第一步configure wine/build-arm64ec核心脚本只有一个build/wine-pe/build-ntdll.sh。首次运行wine/build-arm64ec/config.status不存在时脚本会执行一次性配置mkdir -p wine/build-arm64ec cd wine/build-arm64ec ../configure --enable-archsarm64ec --without-x --disable-tests三个选项的含义很直白--enable-archsarm64ec只构建 ARM64EC 架构跳过其它目标大幅缩短编译时间--without-xiOS 上不需要 X11--disable-tests跳过 Wine 自带测试。这一步耗时较长Wine 全量配置但只需做一次——后续构建其它 PE 模块都复用同一棵构建树。 第二步编译 ntdll 模块配置完成后脚本执行 build/wine-pe/build-ntdll.sh 第 16 行make -C dlls/ntdll产物落在wine/build-arm64ec/dlls/ntdll/arm64ec-windows/ntdll.dll。这一步是标准的 Wine 构建目标编译使用工具链中的arm64ec-w64-mingw32-*交叉编译工具。✂️ 第三步strip 与SizeOfImage 0x50000填充这是整个构建链里最有技术含量的一步。ntdll 是特例它不像其它 DLL 那样原样拷贝而是要经过 strip 精确填充原因是iOS 侧加载器按整份文件映像来映射这个文件而映射路径依赖文件尾部预留的松弛空间。脚本做了两件事见 build-ntdll.sh 第 18-51 行1. strip用arm64ec-w64-mingw32-strip去掉调试段和符号文件会明显变小。2. 填充到 SizeOfImage 0x50000脚本内嵌的 Python 片段从 PE 头解析出OptionalHeader.SizeOfImage然后把文件补足到SizeOfImage 0x50000字节。这里藏着一个真实的踩坑故事代码注释中的 ml1004 修订旧逻辑先断言文件大小 SizeOfImage再追加 0x50000 字节。但 strip 会删除段落导致剥离后的文件比 SizeOfImage更小实测 0x120000 vs 0x140000断言每一次都失败——这个脚本从未完整跑通过早期都是手工补齐的修订后改为算出目标大小填到目标为止结果正好复现已知良好的手工尺寸0x140000 0x50000 0x190000即 1,638,400 字节同时加了防呆若剥离后文件已大于目标脚本直接报错退出拒绝继续填充。 新手理解要点PE 文件里记录了自己的虚拟内存映像大小SizeOfImage。iOS 加载器把磁盘文件直接映射进内存所以磁盘文件必须足够大多余的 0x50000 就是这条映射路径需要的余量。 第四步拷贝进 App 目录填充成功后脚本将成品移动到 app/Madeira/arm64ec-windows/ntdll.dll并打印最终大小供核对。这个目录就是游戏运行时所有 ARM64EC 模块的家。 构建其它 PE 模块一条 make 命令搞定ntdll 之后的其它 Windows 系统库如kernel32、user32等不需要 strip/pad流程简化为两步见 build-ntdll.sh 头部注释# 1. 在已配置的构建树中构建目标模块 make -C wine/build-arm64ec/dlls/模块名 # 2. 把产物拷贝进 App cp wine/build-arm64ec/dlls/模块名/arm64ec-windows/模块名.dll \ app/Madeira/arm64ec-windows/注意cp这一步没有strip 和 pad——它们只服务于 ntdll 的特殊映射需求。️ wine-pe 在整个构建链中的位置build/wine-pe不是孤立运行的。按 docs/BUILDING.md 记录的标准顺序完整链条是顺序构建链产物1build/gnutls-iosGMP / Nettle / GnuTLS 静态库2build/fex-iosbuild/fex-arm64ecFEX 静态库、xtajit64.dll3abuild/ntdll-unix、build/wineserver、build/win32u-unixunix 侧三个静态库3bbuild/wine-pe本文主角ntdll.dll等 ARM64EC PE 模块4build/dxmt-ios dxmt PE 构建D3D11→Metal 运行时5build/madeira-d3d12原生 D3D12 运行时6xcodebuild编译 App最终 IPAwine 的两半边3a 与 3b互不依赖可以并行做但 App 链接第 6 步需要全部产物就位。❓ 常见问题与验证状态Q脚本运行失败报配置文件缺失怎么办先检查toolchains/llvm-mingw-20260421-ucrt-macos-universal/bin是否存在以及wine/子模块是否处于madeira-lgpl分支——这两项是脚本唯一的硬性外部依赖。Q如何验证产物是否正确运行末尾会打印类似ntdll.dll: stripped N pad M 1638400 bytes的汇总。核对 app/Madeira/arm64ec-windows/ntdll.dll 文件大小是否为 0x1900001,638,400 字节是最直观的验收标准。Q从零 clone 一定能一次构建成功吗坦诚说不能。docs/BUILDING.md 如实记录了各步骤的验证状态——strip/pad 步骤已验证通过但首次 configure 在干净机器上仍标记为 UNVERIFIEDLGPL 重链接义务的端到端干净构建也尚未完成。这份文档本身就是可复现性记录的整改清单照着它执行并补上缺失输入是最稳妥的路径。 延伸阅读docs/BUILDING.md完整构建链的权威记录含每项输入的获取方式与 SHA-256 校验值ARCHITECTURE_ANALYSIS.mdWine FEX DXMT 三层架构的深度解析app/Madeira/最终打包目录arm64ec-windows/子目录是所有 PE 模块的落脚点docs/LICENSING.mdLGPL 重链接义务与构建记录的关系掌握build/wine-pe构建链后你已经打通了 Madeira 中 Windows 兼容层最核心的一块拼图configure 一次、make 按需、strippad 只留给 ntdll。下一步建议按构建链顺序推进 DXMT 与 App 编译最终在 iPhone 上亲眼看到 Windows 游戏跑起来。【免费下载链接】MadeiraRun x86-64 Windows PC games on jailed iOS via FEX-Emu Wine DXMT项目地址: https://gitcode.com/GitHub_Trending/mad/Madeira创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

跨境电商主要模式怎么选?2026 卖家选型全攻略 2026/9/30 15:32:34

跨境电商主要模式怎么选?2026 卖家选型全攻略

摘要:跨境电商主要模式怎么选,取决于你的供应链、资金与团队能力。本文从三张底牌出发,拆解四种模式的匹配逻辑,并指出选型中的常见误区,帮你做出清醒决策。 选跨境电商主要模式,本质不是选平台&#xff0…

阅读更多 →
AI辅助测试用例生成实战:从提示词设计到自动化落地 2026/9/30 15:32:27

AI辅助测试用例生成实战:从提示词设计到自动化落地

说到AI辅助测试用例生成,我一开始是抗拒的。做了七八年测试,Excel里几万条用例都是我一条条敲出来的,你告诉我一个对话框就能生成?但后来项目紧急,一个模块需要在一周内补出覆盖登录、权限、支付三个场景的用例&#x…

阅读更多 →
AI辅助测试用例生成全流程:提示词、审核与避坑指南 2026/9/30 15:32:27

AI辅助测试用例生成全流程:提示词、审核与避坑指南

平时测试工作里,最耗时间的是什么?我干了不少年,答案很固定,不是写自动化脚本,也不是搭环境,而是设计测试用例。需求一多,边界条件一杂,脑子就转不动。后来我开始把这一块交给AI辅助…

阅读更多 →
卷积神经网络模块全解析:从卷积、池化到残差与注意力 2026/9/30 15:32:07

卷积神经网络模块全解析:从卷积、池化到残差与注意力

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
EDA界的Codex赛道挤满钓鱼佬 2026/9/30 15:31:53

EDA界的Codex赛道挤满钓鱼佬

9 月 22 日,Cadence宣布给自家的AI Agent 增加了全新的 RTL 生成功能。看完我觉得,称它为"EDA 版的 Codex"不为过。这个新功能是基于原有ChipStack AI Super Agent进行的升级,据官方资料,此前这个Agent就已在能够在验证…

阅读更多 →
AI工程化实战:从零构建可审计、可回滚的生产级AI系统 2026/9/30 15:31:53

AI工程化实战:从零构建可审计、可回滚的生产级AI系统

1. 这不是“搭积木”,而是重建AI系统的地基很多人看到“AI Engineering from Scratch”第一反应是:不就是用LangChain搭个RAG流程?或者拿LlamaIndex跑个文档问答?——这恰恰暴露了当前AI工程实践里最危险的认知偏差:把…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉