在 Windows 主机上运行的 Android 无法链接: 从链接器响应文件中删除反斜杠
作者: mariustz创建于 2026年9月17日更新于 2026年9月17日
标签bug
问题
在 Windows 主机上,dx serve --android / dx build --android 在链接步骤中失败。链接器参数中的每个路径都失去了反斜杠:
clang: error: no such file or directory: 'C:devdioxus-datagridtargetx86_64-linux-androidandroid-releasedepsplayground-2cbced1493db4974.playground.7c43d7eef16e4b50-cgu.0.rcgu.o'
clang: error: no such file or directory: 'C:UsersME.rustuptoolchainsstable-x86_64-pc-windows-msvclibrustlibx86_64-linux-androidliblibcompiler_builtins-7964d93d152b97aa.rlib'原因
当 dx 以链接器的形式运行时,packages/cli/src/build/link.rs 将参数写入 Windows 上的命令文件,并将 @file 传递给真正的链接器:
if cfg!(windows) {
let cmd_contents: String = out_args
.iter()
.map(|s| format!("\"{}\"", s.to_string_lossy()))
.join(" ");
std::fs::write(self.windows_command_file(), cmd_contents)
// ...
out_args = vec![format!("@{}", self.windows_command_file().display()).into()];
}参数被引用,但没有转义。这适合 MSVC link.exe,该命令读取使用 Windows 引用规则的响应文件。对于 Android,链接器是 NDK 的 clang(x86_64-linux-android28-clang.cmd),而 clang 使用 GNU 引用规则读取响应文件,只要目标不是 MSVC。在 GNU 规则下,双引号内的反斜杠是转义字符,因此 "C:\dev\foo.o" 变为 C:devfoo.o。
内容来源: DioxusLabs/dioxus