From 8435f90a7e26dbd4f1cb025cf19b65da767a3957 Mon Sep 17 00:00:00 2001 From: speak-agent <248744407+speak-agent@users.noreply.github.com> Date: Fri, 21 Aug 2026 05:00:47 +0800 Subject: [PATCH] =?UTF-8?q?docs(plan):=20qemu-x86=20=E4=BA=94=E6=9D=A1?= =?UTF-8?q?=E8=85=BF=E5=85=A8=E7=BB=BF,=E4=BB=A5=E5=8F=8A=E7=AC=AC?= =?UTF-8?q?=E4=B8=83=E3=80=81=E7=AC=AC=E5=85=AB=E6=9D=A1=E5=8F=91=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ⭐ 五宿主矩阵全绿,而这是在**任何东西被发布之前**拿到的。linux-x64 真正引导了 multiboot 探针(SeaBIOS 起来、镜像打印 qemu-x86 probe ok);另外四条按设计回落成只核 --version,并各自发出一条 ##[notice] 说明这台宿主的链接器发不出 x86 ELF。 第七条:meson install --no-rebuild 会停在 install 要拷的第一个**生成**文件上。改为 显式组装载荷(模拟器 + pc-bios + ldd 实测出的 13 个 MinGW DLL)—— 这也正是 316MB 那条发现说载荷该做的事。 第八条:引导探针的门槛问错了问题 —— 它检查有没有 32 位编译器,而真正必须成功的是 **链接**。Windows 上编译器通过、链接倒下。 ⚠️ 而我差点把这条修复读成一次「假绿」:检查各腿是否真的引导时,我 grep 的那串字 **同时出现在被回显的脚本里**,于是五条腿全被读成「跳过」。换成 GitHub 真正发出的 ##[notice] 注解之后,真相是一条引导、四条按设计回落。**同一个形状:grep 匹配到的是 脚本而不是结果。** --- ...026-08-21-freestanding-outstanding-four.md | 21 ++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/.agents/docs/2026-08-21-freestanding-outstanding-four.md b/.agents/docs/2026-08-21-freestanding-outstanding-four.md index da682638..c88d30e3 100644 --- a/.agents/docs/2026-08-21-freestanding-outstanding-four.md +++ b/.agents/docs/2026-08-21-freestanding-outstanding-four.md @@ -602,9 +602,11 @@ QEMU 可以从源码构建,而且**只构建需要的目标**能把代价压下 **阶段 2:在一个临时 PR 的 CI 上,用 Actions 构建其余四个宿主。** **⇒ 已开始:`mcpplibs/qemu-x86`。** -> 仓库只含跨宿主构建工作流,不含描述符、不含二进制、不做镜像上传。截至本次修订 -> **linux x64 / linux arm64 / darwin arm64 三条腿绿**(x64 那条还引导了 multiboot -> 探针并断言了打印),darwin x64 绿,win32 x64 仍在迭代。 +> 仓库只含跨宿主构建工作流,不含描述符、不含二进制、不做镜像上传。 +> **⭐ 五条腿全绿。** `linux-x64` 真正引导了 multiboot 探针(SeaBIOS 起来、镜像打印 +> `qemu-x86 probe ok`);另外四条按设计回落成只核 `--version`,并各自发出一条 +> `##[notice]` 说明**这台宿主的链接器发不出 x86 ELF**。这是收录门槛所要求的那件事, +> 而它是在任何东西被发布之前拿到的。 ⭐ **这一步的价值已经兑现:六条只有真跑才会出现的发现,而每一条都是「已发布却装不上」 的成因。** 它们在这里只是红叉。 @@ -618,6 +620,19 @@ QEMU 可以从源码构建,而且**只构建需要的目标**能把代价压下 | 5 | win32 | MSYS2 的 Python **不自带 pip**(单独的包)。我默认了它在场 | | 6 | win32 | `ninja` 会连**单元测试**一起构建,而 `test-vmstate.exe` 在 MinGW 下链接不了(`undefined reference to qemu_ftruncate64`)—— 2032 个目标里已经编好 1897 个。⭐ 只构建模拟器目标而不是给测试打补丁,是更小的主张 | +### 4.3.0 ⚠️ 第七条与第八条:失败的是探针,不是模拟器 + +| # | 宿主 | 发现 | +|---|---|---| +| 7 | win32 | 只构建模拟器目标之后,`meson install --no-rebuild` 停在 `ERROR: File 'trace/trace-events-all' could not be found` —— 那是 install 要拷的**生成**文件。点名它只会停在下一个;去掉 `--no-rebuild` 会重建全部、把链接不了的单元测试带回来。⭐ 改为**显式组装载荷**(模拟器 + `pc-bios` + 用 `ldd` 实测出的 **13 个 MinGW 运行时 DLL**),这也正是 316MB 那条发现说载荷该做的事 | +| 8 | 全部 | ⚠️ **引导探针的门槛问错了问题。** 它检查有没有 32 位*编译器*,然后放链接过去 —— Windows 上前者通过(`cc -m32` 照样产出对象),链接倒下:`ld.exe: unrecognised emulation mode: elf_i386 / Supported emulations: i386pep i386pe`。改成问**链接器**认不认这个 emulation,一条检查覆盖全部宿主 | + +⚠️ **而我差点把这条修复读成一次「假绿」。** 检查各腿是否真的引导时,我 grep 了 +`::notice::this host's linker emits no x86 ELF` —— 那串字**同时出现在被回显的脚本里**, +于是五条腿全被读成「跳过」,包括确实引导了的 `linux-x64`。判据换成 GitHub 真正发出的 +`##[notice]` 注解(脚本回显里不会有)之后,真相是:一条引导、四条按设计回落。 +**同一个形状:grep 匹配到的是脚本而不是结果。** + ### 4.3.1 ⚠️ 体积:strip 回答的比预期少得多 实测于 linux-x64: