Buck2 运行在 Windows 上的一些问题
1. 运行权限问题
当 Buck2 在 Windows 上运行并尝试创建符号链接(symlink)时,可能会出现错误 “A required privilege is not held by the client.”(错误代码1314,意为客户端没有所需的特权)。这个错误表明当前用户帐户缺乏创建符号链接的权限。
解决方法:开启 Windows 开发者模式和修改注册表
启用开发者模式:
- 打开开发者模式设置: 按下 Win + R,输入命令
ms-settings:developers
并回车,或者通过开始菜单进入 “设置” -> “隐私和安全” -> “针对开发人员”(在部分系统中路径为“更新和安全” -> “针对开发人员”); - 启用开发者模式: 在开发者设置页面,将 “开发人员模式” 开关切换为打开状态。阅读提示后确认启用。启用后,Windows 会授予当前用户帐户创建符号链接的权限;
修改注册表
- 按下 Win+R 输入
regedit
打开注册表; - 定位:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem
; - 新建
NtfsAllowSymlinkEvaluation
值为1
( DWORD值 );
最后重启电脑即可,不重启可能会无法生效,总之重启大法解决一切。
2. Python 环境问题
- 测试系统安装 Python 3.13.2 ,并且需要将 Python 的路径添加到环境变量中,执行 Buck2 的
build
命令时不再报找不到 Python 的错误;
3. 编译 Windows 系统 Library 的问题
- 编译 Windows 的
0.58.0
版本时,要使用 Rust Nightly 版本进行编译,目前的Stable
版本会报错; - 需要在 BUCK 中指定
CARGO_MANIFEST_DIR
路径,尝试使用各种相对路径都会报错,使用.
反而正常编译;
load("@prelude//rust:cargo_package.bzl", "cargo")
cargo.rust_library(
name = "windows",
srcs = glob(["src/**/*.rs"]),
crate = "windows",
crate_root = "src/lib.rs",
edition = "2021",
features = [
"Win32",
"Win32_Foundation",
"Win32_Security",
"Win32_System",
"Win32_System_DataExchange",
"Win32_System_Memory",
"Win32_System_Threading",
"Win32_UI",
"Win32_UI_WindowsAndMessaging",
"default",
"std",
],
env = {
"CARGO_MANIFEST_DIR": ".",
},
visibility = ["PUBLIC"],
deps = [
"//third-party/rust/crates/windows-core/0.58.0:windows-core",
"//third-party/rust/crates/windows-targets/0.52.6:windows-targets",
],
)