If you have multiple versions of Gfortran installed along with MinGW, Cygwin, WSL, etc., you have to be careful not to get the paths and environments mixed up. Here is how to check.
After building an EXE, run the Cygwin ldd utility on it. For the version compiled with Cygwin+Gfortran, I see:
T:\LANG\RChen>gfortran -O2 ran.f90 samplers.f90 EM_mix.f90
T:\LANG\RChen>ldd a.exe
ntdll.dll => /cygdrive/c/WINDOWS/SYSTEM32/ntdll.dll (0x7ffabeee0000)
KERNEL32.DLL => /cygdrive/c/WINDOWS/System32/KERNEL32.DLL (0x7ffabd8a0000)
KERNELBASE.dll => /cygdrive/c/WINDOWS/System32/KERNELBASE.dll (0x7ffabc940000)
cyggcc_s-seh-1.dll => /usr/bin/cyggcc_s-seh-1.dll (0x3f7530000)
cygwin1.dll => /usr/bin/cygwin1.dll (0x180040000)
cyggfortran-5.dll => /usr/bin/cyggfortran-5.dll (0x3f6e40000)
cygquadmath-0.dll => /usr/bin/cygquadmath-0.dll (0x3f1d90000)
For the MinGW+Eq.Com.Gfortran built a.exe, ldd reports:
ntdll.dll => /cygdrive/c/WINDOWS/SYSTEM32/ntdll.dll (0x7ffabeee0000)
KERNEL32.DLL => /cygdrive/c/WINDOWS/System32/KERNEL32.DLL (0x7ffabd8a0000)
KERNELBASE.dll => /cygdrive/c/WINDOWS/System32/KERNELBASE.dll (0x7ffabc940000)
msvcrt.dll => /cygdrive/c/WINDOWS/System32/msvcrt.dll (0x7ffabdf40000)
If, when you run ldd on what you think is a Cygwin built EXE, you see “msvcrt” in the output, that is a sign that your paths are mixed up.