mpg123 Windows XP compatibility (with MinGW-w64) ================================================ The problem: ------------ When built with MinGW-w64, mpg123.exe won't run on Windows XP, because it imports "_time32" from "MSVCRT.DLL" ...a function which simply did **not** exist in "MSVCRT.DLL" on Windows XP or Windows XP x64-Edition! The workaround: --------------- In order to fix this problem, it is **extremely** important to add the following compiler option to your CFLAGS: -D__MINGW_USE_VC2005_COMPAT=1 This will make your mpg123.exe link against "_time64", which **is** available in "MSVCRT.DLL" on Windows XP. (If you think this "fix" makes no sense at all, then please read the next two sections) Remarks: -------- MinGW-w64 links 'time()' from against "_time32", **UNLESS** "__MINGW_USE_VC2005_COMPAT" is defined! Note the "UNLESS" in the above sentence - where you certainly would have expected an "IF AND ONLY IF". So, confusingly, the "__MINGW_USE_VC2005_COMPAT" define does the **exact opposite** of what its name indicates. Also it makes **no** sense at all that this MUST be defined **explicitly** to make binaries work on Windows XP. But I am **not** a MinGW-w64 developer, so please don't shoot the messenger ;-) Technical Details: ------------------ With **ancient** compilers, such as VC2005, the "time_t" type still used to be a 32-Bit type. With those ancient compilers, "time()" would link against "_time". There was **no** "_time32" or "_time64" yet! But: With any **contemporary** compiler, the "time_t" type is 64-Bit; and "time()" links against "_time64". The MSVCRT export "_time32" is a rather new invention; it is simply an alias for the old 32-Bit "_time" export. On Windows XP (including x64-Edition) **only** "_time64" (64-Bit) and the legacy "_time" (32-Bit) existed!