mirror of
https://git.code.sf.net/p/mingw-w64/mingw-w64
synced 2024-11-23 01:44:43 +08:00
configure: Use ucrt for msvcrt by default.
Signed-off-by: Jacek Caban <jacek@codeweavers.com>
This commit is contained in:
parent
d7877cbd2e
commit
82b8edc101
9
mingw-w64-crt/configure
vendored
9
mingw-w64-crt/configure
vendored
@ -1513,7 +1513,7 @@ Optional Packages:
|
||||
--with-genlib=PATH Whether to build import libraries via the genlib
|
||||
tool (default: no)
|
||||
--with-default-msvcrt=LIB
|
||||
Lib to provide as libmsvcrt.a (default: msvcrt-os)
|
||||
Lib to provide as libmsvcrt.a (default: ucrt)
|
||||
|
||||
Some influential environment variables:
|
||||
CC C compiler command
|
||||
@ -2068,9 +2068,7 @@ struct stat;
|
||||
/* Most of the following tests are stolen from RCS 5.7 src/conf.sh. */
|
||||
struct buf { int x; };
|
||||
struct buf * (*rcsopen) (struct buf *, struct stat *, int);
|
||||
static char *e (p, i)
|
||||
char **p;
|
||||
int i;
|
||||
static char *e (char **p, int i)
|
||||
{
|
||||
return p[i];
|
||||
}
|
||||
@ -2121,6 +2119,7 @@ extern int puts (const char *);
|
||||
extern int printf (const char *, ...);
|
||||
extern int dprintf (int, const char *, ...);
|
||||
extern void *malloc (size_t);
|
||||
extern void free (void *);
|
||||
|
||||
// Check varargs macros. These examples are taken from C99 6.10.3.5.
|
||||
// dprintf is used instead of fprintf to avoid needing to declare
|
||||
@ -6787,7 +6786,7 @@ if test ${with_default_msvcrt+y}
|
||||
then :
|
||||
withval=$with_default_msvcrt;
|
||||
else $as_nop
|
||||
with_default_msvcrt=msvcrt-os
|
||||
with_default_msvcrt=ucrt
|
||||
fi
|
||||
|
||||
if test "$with_default_msvcrt" = "msvcrt"; then
|
||||
|
@ -267,9 +267,9 @@ AC_MSG_RESULT([$enable_delay_import_libs])
|
||||
AC_MSG_CHECKING([what to provide as libmsvcrt.a])
|
||||
AC_ARG_WITH([default-msvcrt],
|
||||
[AS_HELP_STRING([--with-default-msvcrt=LIB],
|
||||
[Lib to provide as libmsvcrt.a (default: msvcrt-os)])],
|
||||
[Lib to provide as libmsvcrt.a (default: ucrt)])],
|
||||
[],
|
||||
[with_default_msvcrt=msvcrt-os])
|
||||
[with_default_msvcrt=ucrt])
|
||||
if test "$with_default_msvcrt" = "msvcrt"; then
|
||||
with_default_msvcrt=msvcrt-os
|
||||
fi
|
||||
|
58
mingw-w64-doc/howto-build/ucrt-vs-msvcrt.txt
Normal file
58
mingw-w64-doc/howto-build/ucrt-vs-msvcrt.txt
Normal file
@ -0,0 +1,58 @@
|
||||
== 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/
|
12
mingw-w64-headers/configure
vendored
12
mingw-w64-headers/configure
vendored
@ -1387,7 +1387,7 @@ Optional Packages:
|
||||
--with-default-win32-winnt=VER
|
||||
Default value of _WIN32_WINNT (default: 0xa00)
|
||||
--with-default-msvcrt=LIB
|
||||
Default msvcrt to target (default: msvcrt)
|
||||
Default msvcrt to target (default: ucrt)
|
||||
|
||||
Report bugs to <mingw-w64-public@lists.sourceforge.net>.
|
||||
_ACEOF
|
||||
@ -3002,7 +3002,7 @@ if test ${with_default_msvcrt+y}
|
||||
then :
|
||||
withval=$with_default_msvcrt;
|
||||
else $as_nop
|
||||
with_default_msvcrt=msvcrt
|
||||
with_default_msvcrt=ucrt
|
||||
fi
|
||||
|
||||
case $with_default_msvcrt in
|
||||
@ -3036,12 +3036,12 @@ msvcr110*)
|
||||
msvcr120*)
|
||||
default_msvcrt_version=0xC00
|
||||
;;
|
||||
ucrt*)
|
||||
default_msvcrt_version=0xE00
|
||||
;;
|
||||
msvcrt|*)
|
||||
msvcrt*)
|
||||
default_msvcrt_version=0x700
|
||||
;;
|
||||
ucrt*|*)
|
||||
default_msvcrt_version=0xE00
|
||||
;;
|
||||
esac
|
||||
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_default_msvcrt ($default_msvcrt_version)" >&5
|
||||
printf "%s\n" "$with_default_msvcrt ($default_msvcrt_version)" >&6; }
|
||||
|
@ -144,9 +144,9 @@ AC_SUBST([DEFAULT_WIN32_WINNT])
|
||||
AC_MSG_CHECKING([default msvcrt])
|
||||
AC_ARG_WITH([default-msvcrt],
|
||||
[AS_HELP_STRING([--with-default-msvcrt=LIB],
|
||||
[Default msvcrt to target (default: msvcrt)])],
|
||||
[Default msvcrt to target (default: ucrt)])],
|
||||
[],
|
||||
[with_default_msvcrt=msvcrt])
|
||||
[with_default_msvcrt=ucrt])
|
||||
case $with_default_msvcrt in
|
||||
msvcrt10*)
|
||||
default_msvcrt_version=0x100
|
||||
@ -178,12 +178,12 @@ msvcr110*)
|
||||
msvcr120*)
|
||||
default_msvcrt_version=0xC00
|
||||
;;
|
||||
ucrt*)
|
||||
default_msvcrt_version=0xE00
|
||||
;;
|
||||
msvcrt|*)
|
||||
msvcrt*)
|
||||
default_msvcrt_version=0x700
|
||||
;;
|
||||
ucrt*|*)
|
||||
default_msvcrt_version=0xE00
|
||||
;;
|
||||
esac
|
||||
AC_MSG_RESULT([$with_default_msvcrt ($default_msvcrt_version)])
|
||||
AS_VAR_SET([DEFAULT_MSVCRT_VERSION],[$default_msvcrt_version])
|
||||
|
Loading…
Reference in New Issue
Block a user