I've used mingw in the past, the exe usually is 10x the size and wants the entire binary of any library used as well and first requires you to download the source windows version of the lib and link it. Meaning a small SDL2 project on Linux was I think 100kib while on windows it was 1mib + 2.5 mib
Windows has dll hell... so basically, to ge around this, some tools statically link by default. It's not an ideal solution, but it works most of the time... and regarding how unmainatained a Windows install might be (old installs, like Win7) or how badly updated/upgraded it might be (newer installs, Win10 and 11), I guess it is the only choice you actually have to make your app run on as many Windows systems as possible.
Since I don't do this professionally it doesn't have to run on any windows systems, I just was stuck with windows recently so I programmed in a GitHub codespace and compiled for Windows which is how I found out about all that I'm so happy not to have run into problems like this on Linux.
Best I can do is make an elf that mostly works and the memory manager seems pretty solid but the second you start doing stuff with strings, it fucks all up and I never figured out that bug after months so it is what it is. If you want to print a string you have to drop into real mode first.
I was able to use this guys docker image and tool in order to cross compile my Rust programs in the past. They were very simple programs so I dont know how well it works for larger projects.