From 695699f01e2c189f691e9c3fe4ca1cab69b639a5 Mon Sep 17 00:00:00 2001 From: TermiNexus Date: Sun, 9 Aug 2026 22:54:32 +0800 Subject: [PATCH] =?UTF-8?q?fix(build):=20=E7=BB=9F=E4=B8=80=20SHA1=20?= =?UTF-8?q?=E5=8F=A3=E5=BE=84=E6=B6=88=E9=99=A4=E7=AC=A6=E5=8F=B7=E5=89=8D?= =?UTF-8?q?=E7=BC=80=E4=B8=8D=E4=B8=80=E8=87=B4(undefined=20reference)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Phase2 App 源文件 SHA1 改用 IncludesScanner.compute_file_sha1(CRLF→LF 归一化), 与 StubMerger 对同一批文件口径一致; 此前用 Utils.compute_sha1(原始字节) 在 CRLF 文件上产生不同前缀 - compute_file_sha1 BUF_SIZE 128KB→1MB(与翻译侧 SRC_BUF_SIZE 一致), 消除大文件尾部变更不触发缓存失效 --- App/lib/core/IncludesScanner.vp | 4 +++- App/lib/core/Phase2.vp | 6 +++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/App/lib/core/IncludesScanner.vp b/App/lib/core/IncludesScanner.vp index d194fc6..ef4651a 100644 --- a/App/lib/core/IncludesScanner.vp +++ b/App/lib/core/IncludesScanner.vp @@ -155,7 +155,9 @@ def compute_file_sha1(pool: memhub.MemBuddy | t.CPtr, return None # 读取文件内容(stdlib.malloc 分配,避免 mbuddy 池耗尽) - BUF_SIZE: t.CSizeT = 131072 + # BUF_SIZE 与翻译侧 SRC_BUF_SIZE(1MB)一致:若截断到 128KB, + # 超过 128KB 的文件尾部内容变更不会改变 SHA1 → 增量缓存永不失效。 + BUF_SIZE: t.CSizeT = 1048576 buf: bytes = Utils.read_file_to_buf(file_path, BUF_SIZE) if buf is None: return None diff --git a/App/lib/core/Phase2.vp b/App/lib/core/Phase2.vp index 53575b8..6f7dae1 100644 --- a/App/lib/core/Phase2.vp +++ b/App/lib/core/Phase2.vp @@ -124,7 +124,11 @@ def _ScanDirForPyFiles(mb: memhub.MemBuddy | t.CPtr, if full_path is not None: sbuf: bytes = Utils.read_file_to_buf(full_path, SRC_BUF_SIZE) if sbuf is not None: - sha1_val: str = Utils.compute_sha1(mb, sbuf) + # 统一用 IncludesScanner.compute_file_sha1(CRLF→LF 归一化), + # 与 StubMerger.vp:1510 对同一批 App 源文件的口径一致; + # 此前用 Utils.compute_sha1(原始字节)会导致 stub/define + # 符号前缀不一致 → 链接报 undefined reference。 + sha1_val: str = IncludesScanner.compute_file_sha1(mb, full_path) if sha1_val is not None: ea: t.CUInt64T = t.CUInt64T(entries) + file_count * entry_size ent: SrcFileEntry | t.CPtr = (SrcFileEntry | t.CPtr)(t.CVoid(ea, t.CPtr))