*-win7-windows-msvc

Tier: 3

Windows 目标继续支持 Windows 7。

目标维护者

  • @roblabla

要求

此目标支持 core、alloc、std 和 test 的所有功能。维护者在私有基础设施上每晚自动对此进行测试。主机工具也可能工作,尽管目前尚未对此进行测试。

这些目标遵循 Windows 调用约定 для extern "C"。

与任何其他 Windows 目标一样,创建的二进制文件采用 PE 格式。

构建目标

您可以通过将目标添加到 config.toml 中的目标列表,来构建支持这些目标的 Rust。

[build]
build-stage = 1
target = ["x86_64-win7-windows-msvc"]

构建 Rust 程序

Rust 不为此目标发布预编译的工件。要为此目标编译,您需要构建启用此目标的 Rust(请参阅上面的“构建目标”),或者使用 build-std 或类似工具构建您自己的副本。

测试

创建的二进制文件在使用原生硬件的 Windows 或 Wine 上可以正常工作。可以使用 此处 描述的 remote-test-server 进行远程测试。

交叉编译工具链和 C 代码

兼容的 C 代码可以使用 MSVC 的 cl.exe 或 LLVM 的 clang-cl 构建。

可以使用 clang-cl/lld-link 进行交叉编译。它还需要 Windows SDK,可以使用 xwin 获取。

  • 在您的机器上安装 clang-cllld-link,并确保它们在您的 $PATH 中。

  • 安装 xwin: cargo install xwin

  • 使用 xwin 安装 Windows SDK: xwin splat --output winsdk

  • 创建一个包含以下内容的 xwin-lld-link 脚本

    #!/usr/bin/env bash
    set -e
    XWIN=/path/to/winsdk
    lld-link "$@" /libpath:$XWIN/crt/lib/x86_64 /libpath:$XWIN/sdk/lib/um/x86_64 /libpath:$XWIN/sdk/lib/ucrt/x86_64
    
  • 创建一个包含以下内容的 xwin-clang-cl 脚本

    #!/usr/bin/env bash
    set -e
    XWIN=/path/to/winsdk
    clang-cl /imsvc "$XWIN/crt/include" /imsvc "$XWIN/sdk/include/ucrt" /imsvc "$XWIN/sdk/include/um" /imsvc "$XWIN/sdk/include/shared" --target="x86_64-pc-windows-msvc" "$@"
    
  • 在您的 config.toml 中,添加以下行

    [target.x86_64-win7-windows-msvc]
    linker = "path/to/xwin-lld-link"
    cc = "path/to/xwin-clang-cl"
    

您现在应该能够交叉编译 Rust std 和任何 rust 程序。