Windows 10 で Rust のインストール

Rust の Windows 環境構築で少しだけハマったのでメモ代わりです。

## インストール

[rust の公式ページ](https://www.rust-lang.org/tools/install) に従って ``rustup-init.exe`` をインストール。

環境変数`PATH`に`%USERPROFILE%/.cargo/bin`を追加するよう言われるので追加。

```rustup set default-host x86_64-pc-windows-msvc``` しておく。

続いて、VC Build Tools が必要とのことなのでインストール。

[Microsoftの Visual Studioページ](https://visualstudio.microsoft.com/ja/downloads/) トップ下の「すべてのダウンロード」から Visual Studio 2019 のツールをクリックして開き、Build Tools for Visual Studio 2019 を選択。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52184/1bb65645-f446-3125-e894-29402dd4c50b.png)

インストーラーが起動するので、画面から "Visual C++ Build Tool" を選択。

  - 画面右側はデフォルトのまま選択

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52184/ab6a969d-ccf1-d89d-b5c6-fe0a4d955b67.png)

※関係ありませんが Windows でのスクショは <kbd>PrintScreen</kbd> だけではなく、 <kbd><kbd>Win</kbd> + <kbd>Shift</kbd> + <kbd>S</kbd></kbd> でスクショツールが起動するようになったのですね。便利。(Macでは <kbd><kbd>Cmd</kbd> + <kbd>Shift</kbd> + <kbd>Ctrl</kbd> + <kbd>4</kbd></kbd> を多用していたので同じものがあるといいなーと思っていました）



## トラブル

以下のようなサンプルをコンパイルしようとするとエラーになりました

```rust:main.rs
fn main() {
    println!("Hello")
}
```

以下かがエラー内容です。

メッセージの日本語が表示されないのも何気につらい。`chcp 437` して英語のコードページに切り替えてもダメでした。`rust windows link error 1112` などで検索してもいまいちヒットせず……

```
c:\me\git\rust-tutorial>rustc main.rs
error: linking with `link.exe` failed: exit code: 1112
  |
  = note: "C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\BuildTools\\VC\\Tools\\MSVC\\14.16.27023\\bin\\HostX86\\x86\\link.exe" "/NOLOGO" "/NXCOMPAT" "/LIBPATH:C:\\Users\\reki\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib" "main.main.7rcbfp3g-cgu.0.rcgu.o" "main.main.7rcbfp3g-cgu.1.rcgu.o" "main.main.7rcbfp3g-cgu.2.rcgu.o" "main.main.7rcbfp3g-cgu.3.rcgu.o" "main.main.7rcbfp3g-cgu.4.rcgu.o" "main.main.7rcbfp3g-cgu.5.rcgu.o" "/OUT:main.exe" "main.4s37gsrti678ik8u.rcgu.o" "/OPT:REF,NOICF" "/DEBUG" "/NATVIS:C:\\Users\\reki\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\etc\\intrinsic.natvis" "/NATVIS:C:\\Users\\reki\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\etc\\liballoc.natvis" "/NATVIS:C:\\Users\\reki\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\etc\\libcore.natvis" "/LIBPATH:C:\\Users\\reki\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib" "C:\\Users\\reki\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\libstd-c418a1c7c96bdbae.rlib" "C:\\Users\\reki\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\libpanic_unwind-740e55ec30ec9b42.rlib" "C:\\Users\\reki\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\librustc_demangle-4e3d4b2c73be2130.rlib" "C:\\Users\\reki\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\libhashbrown-e03c95365300773b.rlib" "C:\\Users\\reki\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\librustc_std_workspace_alloc-9b63ec27f8df7123.rlib" "C:\\Users\\reki\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\libunwind-cc811f306714ba24.rlib" "C:\\Users\\reki\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\liblibc-dee84a63f4b90027.rlib" "C:\\Users\\reki\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\liballoc-7d070a58cfb70fe0.rlib" "C:\\Users\\reki\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\librustc_std_workspace_core-10ec18f1dfe36e70.rlib" "C:\\Users\\reki\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\libcore-e0e69d50f48d4667.rlib" "C:\\Users\\reki\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\libcompiler_builtins-45eb0e961cc324b2.rlib" "advapi32.lib" "ws2_32.lib" "userenv.lib" "msvcrt.lib"
  = note: Non-UTF-8 output: msvcrt.lib(chkstk.obj) : fatal error LNK1112: \x83\x82\x83W\x83\x85\x81[\x83\x8b\x82\xcc\x83R\x83\x93\x83s\x83\x85\x81[\x83^\x81[\x82\xcc\x8e\xed\x97\xde \'x86\' \x82\xcd\x91\xce\x8f\xdb\x83R\x83\x93\x83s\x83\x85\x81[\x83^\x81[\x82\xcc\x8e\xed\x97\xde \'x64\' \x82\xc6\x8b\xa3\x8d\x87\x82\xb5\x82\xc4\x82\xa2\x82\xdc\x82\xb7\x81B\r\n

error: aborting due to previous error
```

これは [VisualStudio の LNK1112 と LNK1158 の対処](https://qiita.com/ymdymd/items/bfc1ddfdfe870a387f10) にも説明のあるエラーで、VC Build Tools の設定が 32bit 向けになっているのが原因でした。

``vcvars64.bat`` を実行すればよいのですが、これがどこにあるのか見つけるのに少し苦労しました。

```
"c:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build\vcvars64.bat"
```

で解決できました。