cargo 后端链接器探测经注册表回退选中 VS 14.0 (2015) 的 link.exe(注册表 WOW6432Node\...\SxS\VS7 的 14.0 项是 rustc 回退探测源),该老链接器对长路径处理不当:默认安装位置(%LOCALAPPDATA%\bot-forge,前缀 45 字符)下编译对象路径达 263 字符,触发 LNK1104(对象文件打开失败),minimal 安装被阻断(BF1008/exit8)。首次出现:本版(botforge-win 1.0.3 升级测试)新发现。受影响安装场景:默认安装位置 + 注册表存在 VS 14.0 回退项的 Windows 环境。实际影响:默认安装位置 minimal 必败。根因链(T4.03/T4.03b–f 逐层定位):① rustc 链接器自动探测经注册表回退选中 VS 14.0 而非 vswhere 探测到的 VS2022 14.44;② 托管 MSVC env(INCLUDE/LIB/LIBPATH + msvc-bin PATH 前置)确实注入子进程但不影响 rustc 链接器选择;③ VS 14.0 link.exe(14.00.24247.2)不支持长路径 → LNK1104;④ 独立运行 rustc/cargo 用 VS2022 链接器编译同样长度路径成功。旁路验证:父环境 CARGO_TARGET_*_LINKER/RUSTC_WRAPPER 不透传(clear_env 白名单剔除);CARGO_HOME config 的 [target] linker/[build] rustc-wrapper 对子进程不生效。缓解有效:BOT_FORGE_HOME 指向短路径(如 %USERPROFILE%\bft)后对象路径降至约 238 字符,编译安装成功。修复建议:显式传 -C linker/RUSTC_LINKER、链接器探测优先 vswhere/VS2022、文档化 BOT_FORGE_HOME。
WOW6432Node\...\SxS\VS7
%LOCALAPPDATA%\bot-forge
CARGO_TARGET_*_LINKER
RUSTC_WRAPPER
[target] linker
[build] rustc-wrapper
BOT_FORGE_HOME
%USERPROFILE%\bft
-C linker
RUSTC_LINKER
botforge-win install minimal --yes
链接器探测选中可用的新版 VS 链接器,默认安装位置 minimal 安装成功。
注册表回退选中 VS 14.0 (2015) link.exe,263 字符对象路径 LNK1104 → BF1008/exit8(默认 home 4 次独立复现,错误输出显式给出 VS 14.0 link.exe 路径);两种用户级旁路(env / CARGO_HOME config)均不生效;BOT_FORGE_HOME 短路径缓解有效(~238 字符编译成功)。证据:T4.01g/T4.01h/T4.02/T4.03/T4.03c-d/T4.04/T4.04c/T6.01。T4.01g 实测输出:
bot-forge error Error code BF1008 error: linking with `link.exe` failed: exit code: 1104 = note: "C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\bin\\amd64\\link.exe" "/NOLOGO" … = note: LINK : fatal error LNK1104: 无法打开文件“C:\Users\…\bot-forge\work\cargo\rust-bot\ targets\cd5c6851…\release\build\proc-macro2-…\build_script_build-….rcgu.o” error: could not compile `parking_lot_core` (build script) due to 1 previous error exit=8
对象路径实测 263 字符(MAX_PATH=260,T4.01h);独立 cargo 同长度路径用 VS2022 14.44 链接成功(T4.03d);BOT_FORGE_HOME 短路径缓解后对象路径 ~238 字符,rust-bot 2.0.0 编译安装成功(T4.04c)。
各平台确认:黄区 Windows x64 复现(默认 home 4 次独立复现,单区独有记录)。
--version
--abandon
问题概述
cargo 后端链接器探测经注册表回退选中 VS 14.0 (2015) 的 link.exe(注册表
WOW6432Node\...\SxS\VS7的 14.0 项是 rustc 回退探测源),该老链接器对长路径处理不当:默认安装位置(%LOCALAPPDATA%\bot-forge,前缀 45 字符)下编译对象路径达 263 字符,触发 LNK1104(对象文件打开失败),minimal 安装被阻断(BF1008/exit8)。首次出现:本版(botforge-win 1.0.3 升级测试)新发现。受影响安装场景:默认安装位置 + 注册表存在 VS 14.0 回退项的 Windows 环境。实际影响:默认安装位置 minimal 必败。根因链(T4.03/T4.03b–f 逐层定位):① rustc 链接器自动探测经注册表回退选中 VS 14.0 而非 vswhere 探测到的 VS2022 14.44;② 托管 MSVC env(INCLUDE/LIB/LIBPATH + msvc-bin PATH 前置)确实注入子进程但不影响 rustc 链接器选择;③ VS 14.0 link.exe(14.00.24247.2)不支持长路径 → LNK1104;④ 独立运行 rustc/cargo 用 VS2022 链接器编译同样长度路径成功。旁路验证:父环境CARGO_TARGET_*_LINKER/RUSTC_WRAPPER不透传(clear_env 白名单剔除);CARGO_HOME config 的[target] linker/[build] rustc-wrapper对子进程不生效。缓解有效:BOT_FORGE_HOME指向短路径(如%USERPROFILE%\bft)后对象路径降至约 238 字符,编译安装成功。修复建议:显式传-C linker/RUSTC_LINKER、链接器探测优先 vswhere/VS2022、文档化 BOT_FORGE_HOME。影响范围
%LOCALAPPDATA%\bot-forge(45 字符前缀)BOT_FORGE_HOME指向短路径(实测有效,对象路径 ~238 字符时编译成功)复现步骤
botforge-win install minimal --yesBOT_FORGE_HOME指向短路径后重跑预期结果
链接器探测选中可用的新版 VS 链接器,默认安装位置 minimal 安装成功。
实际结果
注册表回退选中 VS 14.0 (2015) link.exe,263 字符对象路径 LNK1104 → BF1008/exit8(默认 home 4 次独立复现,错误输出显式给出 VS 14.0 link.exe 路径);两种用户级旁路(env / CARGO_HOME config)均不生效;BOT_FORGE_HOME 短路径缓解有效(~238 字符编译成功)。证据:T4.01g/T4.01h/T4.02/T4.03/T4.03c-d/T4.04/T4.04c/T6.01。T4.01g 实测输出:
对象路径实测 263 字符(MAX_PATH=260,T4.01h);独立 cargo 同长度路径用 VS2022 14.44 链接成功(T4.03d);BOT_FORGE_HOME 短路径缓解后对象路径 ~238 字符,rust-bot 2.0.0 编译安装成功(T4.04c)。
各平台确认:黄区 Windows x64 复现(默认 home 4 次独立复现,单区独有记录)。
运行环境与供应信息
--version自报 1.0.1)%LOCALAPPDATA%\bot-forge;缓解组BOT_FORGE_HOME短路径安全、性能与恢复证据
--abandon清理;缓解后编译安装成功)附件与提交确认
第二部分:中级别(10 项)