Installation and Debugging on Windows 8 and 10

This post was flagged by the community and is temporarily hidden.

I might have given you the impression I am teaching kids to program. This is somthing I would love to do but in not my current reality.

My actual audience are recruits and the laptops they are using are standard builds (Windows 8.1, yes! 8.1) and the stuff I am teaching then they should already know as most of them are graduates.

What i am actually doing is re-training them and making sure they have the tools to work within the nameless organisation I am a small part of.

Such is my lot!

One of the most basic things you need to be able to do in a native language is talk to the OS kernel. For most operating systems, you do this by linking (with the system linker) to the libc provided by your OS. You can then call libc functions which in turn make syscalls into the kernel.

Go is a bit different here because they have re-implemented libc for each platform they support which allows them to avoid needing your system's linker and also makes it very easy to cross compile to different targets. This is a very neat idea on Linux where the kernel provides a stable syscall interface but Windows does not and syscall numbers can change even between Windows Update patches! As a result, on Windows you have to link against libc (aka kernel32.dll).

The issue you are running into is that Microsoft only provides two ways to get the Windows linker:

  • Build Tools for Windows

    • This is the smaller download but it contains a complete set of tools for doing development not just a linker.
  • Visual Studio n

    • This is a superset of the Build Tools for Windows and also includes the Visual Studio IDE and is an even larger download.

If you are doing nearly any native development on Windows, you will need one of those.

If you are not interested in being able to use standard Windows libraries from your Rust app, you might be interested in the GNU toolchain. The x86_64-pc-windows-gnu toolchain (download link) uses the GNU abi and comes with it's own linker so it's entirely self contained. This is often an easier option to get started with Rust on Windows but you won't be able to use native Windows API's like those provided by winapi.

OK. With you. So often the way of the world.