From a438d7c3b88d33bdb393e3dc3eec3214d7acbf15 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sat, 9 Nov 2024 19:19:52 +0200 Subject: [PATCH] [UCRT] Add GCC compatible definition of _CRT_STDIO_INLINE In C99 mode GCC emits global symbols for inline functions, as soon as the compilation unit contains a declaration that marks the function as "extern". A number of functions like printf are implicitly declared as extern by GCC, which seemingly cannot be disabled. This would lead to the inline function being emitted as a global symbol in every compilation unit. Using static inline prevents duplicate symbol errors. --- sdk/include/ucrt/corecrt_stdio_config.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/sdk/include/ucrt/corecrt_stdio_config.h b/sdk/include/ucrt/corecrt_stdio_config.h index 360a45824d6..cc4b410b525 100644 --- a/sdk/include/ucrt/corecrt_stdio_config.h +++ b/sdk/include/ucrt/corecrt_stdio_config.h @@ -23,7 +23,11 @@ _CRT_BEGIN_C_HEADER #undef _CRT_STDIO_INLINE #define _CRT_STDIO_INLINE #elif !defined _CRT_STDIO_INLINE + #if defined(__GNUC__) + #define _CRT_STDIO_INLINE static __inline + #else #define _CRT_STDIO_INLINE __inline + #endif #endif #if !defined RC_INVOKED // RC has no target architecture