Hi all,
I just pushed a change to out build system to use UCRT by default.
Bellow is a copy of more detailed informations, it can be also found in
git in mingw-w64-doc/howto-build/ucrt-vs-msvcrt.txt.
Thanks,
Jacek
== Summary ==
Starting from mingw-w64 version 12 and onwards, UCRT (Universal C
Runtime) will
be the default CRT runtime, unless specified otherwise during the minwgw-64
build process. We believe that this configuration is the best choice for the
majority of users. While we encourage users to consider switching to
UCRT, we
understand that it may not always be desirable, especially for compatibility
reasons. Therefore, all previously supported configurations will continue to
be supported. Users who wish to continue using msvcrt.dll can easily do
so by
adding the --with-default-msvcrt=msvcrt argument to both the
mingw-w64-headers and mingw-w64-crt configure scripts.
== Background ==
mingw-w64 provides C runtime libraries that directly or indirectly utilize
Microsoft DLLs at runtime. Over the years, Microsoft has released various
versions of these DLLs, some of which were designed for specific MSVC
versions
while others aimed for backward compatibility. When building the mingw-w64
toolchain, users can specify a version of the runtime DLL using the
--with-default-msvcrt= configure option. The most commonly used versions are
ucrt (utilizing ucrtbase.dll) and msvcrt (utilizing msvcrt.dll).
The implementation of msvcrt.dll dates back to the Windows 9x era. While
it has
been extended for a period, it eventually became frozen in favor of
providing
separate DLLs for future MSVC versions. Although msvcrt.dll continues to be
shipped with modern Windows versions, it remains compatible with the version
from the 1990s. msvcrt.dll is known to deviate from standard behavior in
many
aspects. mingw-w64 includes compatibility wrappers and extensions to improve
standard compatibility, but there are limitations to what can be practically
achieved.
On the other hand, ucrtbase.dll was introduced with MSVC 14 and is currently
included with all Windows versions supported by Microsoft. It is also
available
as a redistributable package for older versions of Windows. ucrtbase.dll
aims to
replace MSVC version-specific DLLs and has been used by all MSVC
versions since
its introduction. It offers a more modern approach compared to
msvcrt.dll and
provides better standard compatibility out of the box, reducing overhead
on the
mingw-w64 side.
== Compatibility ==
When switching between toolchains that use different runtime libraries,
it is
generally advised not to mix static libraries, unless certain exceptions
apply.
If in doubt, it is recommended to rebuild all static libraries when
switching
the toolchain's runtime DLL.
Dynamic libraries are less likely to be affected. If the CRT is not part
of the
ABI of a library you intend to use, meaning it does not involve passing FILE
structs or similar types between modules or depending on the CRT
allocator of
other modules, it should remain unaffected. Otherwise, a compatible build of
that library will be required.
== See Also ==
"MSVCRT vs UCRT": https://www.msys2.org/docs/environments/
_______________________________________________
Mingw-w64-public mailing list
Mingw-w64-public@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public