Fix static linking when using MinGW-w64 #15167
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Resolves part of #6170.
libcmt.lib
ormsvcrt.lib
is provided by MinGW-w64's built-in spec files directly (seecc -dumpspecs
), so we do not link against it./MD
in MSVC orCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreadedDLL
in CMake. We therefore never link againstlibucrt
.-lucrt
explicitly may lead to a crash in the startup code when combined with-static
and-msvcrt
, depending on the relative link order. In MinGW-w64,-lmsvcrt
is already equivalent to-lucrt
or-lmsvcrt-os
, depending on how it was built; in particular,/ucrt64/bin/libmsvcrt.a
is a copy oflibucrt.a
in MSYS2, but/mingw64/bin/libmsvcrt.a
is a copy oflibmsvcrt-os.a
. Thus we drop-lucrt
entirely and rely on the MinGW-w64's build-time configuration to select the appropriate C runtime.-mcrtdll
can be used to override the C runtime, and it should be possible to cross-build binaries between the MINGW64 and the UCRT64 environments using this flag. The interpreter now imitates this linker behavior.