MinGW is basically a port of GCC and related tools, allowing them to run natively on windows machines.
Cross compiling is the act of using a compiler on one operating system/architecture to generate a bin/exe/dll/object that is compatible with another operating system/architecture. Basically, you ask the compiler to generate assembly and startup routines for something other than the host os's default.
IF you were on a linux machine, you'd use gcc to compile it for the linux machine... if you were on a windows machine, you'd use MinGW, but with flags to tell it to compile for the linux machine's specs.