|
59 | 59 | A 轴上的每一项都在描述**编译器**,没有一项描述它编译时所依据的**库** —— |
60 | 60 | 而两者是分开安装的。`driverIdentity` 按设计也覆盖不了它: |
61 | 61 | `normalize_driver_output` **故意**抹掉路径,好让一个条目能被两个 home 共享。 |
62 | | - 新增 `targetHeaderSet` 轴,取自已经解析好的 `linkmodel`,并 store-相对化。 |
| 62 | + 新增 `targetHeaderSet` 轴,取自已经解析好的 `linkmodel`,并**分两档相对化**: |
| 63 | + `<store>` 与 `<home>`。⚠️ 只做 `<store>` 一档不够 —— 最常见的那台机器走 |
| 64 | + `CLibMode::Sysroot`,它唯一的编译 token 是 `--sysroot=<home>/registry/subos/default`, |
| 65 | + 在 HOME 底下而不在 store 底下,于是每个条目都会带上这台机器的 home。分得开什么: |
| 66 | + 两个载荷(路径里带版本号)⇒ 两个键;一个 home 下的两个 subos ⇒ 两个键; |
| 67 | + 两个 home 下同名的 subos ⇒ 仍是一个键(由整工程指纹的第 11 项区分)。 |
63 | 68 | ⚠️ 不 bump `kCacheEpoch` —— 旧条目是 miss 而不是不可用。 |
64 | 69 |
|
| 70 | +- **⭐⭐ 请求的版本和载荷目录的版本是两套词汇,而每个查找都按请求那套拼。** |
| 71 | + |
| 72 | + RuntimeBinding 带的是**声明的**版本(`glibc@2.44`),而 xlings 把载荷目录按这个 |
| 73 | + 请求**解析成**的版本命名(`2.44.2`)。索引在同一序列内挪动一次包,所有按声明版本 |
| 74 | + 拼目录名的查找就同时失效 —— 在每一台**新**机器上,在任何已存在的机器上都不出现。 |
| 75 | + |
| 76 | + 两个查找点各自拼过一遍,所以修好一个还剩另一个,而第二处的失败**根本不提版本**: |
| 77 | + glibc 的 include 目录只是没被加上,用户读到的是 libstdc++ 头文件里的 |
| 78 | + `features.h: No such file`。⇒ 收敛到一个 `payload_dir_for_version`。 |
| 79 | + |
| 80 | + ⭐ **判据是「精化」,不是「按目录序挑一个」**:`2.44.2` 的版本**分量**以请求的分量 |
| 81 | + 开头。`2.4` 回答不了 `2.44`(逐分量比,不是逐字符)。两个载荷都精化同一个请求时 |
| 82 | + 返回**空** —— 「这个请求的解析结果」得是唯一一个才配叫答案,而按目录序挑正是这里 |
| 83 | + 每个调用者都拒绝做的猜测。反方向(拿更旧的载荷回答更新的请求)不接受。 |
| 84 | + |
65 | 85 | - **⭐ home 发现有第四份拷贝,而且会伸到别的 home 里去。** |
66 | 86 |
|
67 | 87 | `active_home_xpkgs()` 自己重推了一遍 home(漏掉自包含安装那一档); |
|
0 commit comments