From fdd1d7d60c33b08f4181df8e81c739694762898b Mon Sep 17 00:00:00 2001 From: Victor Perevertkin Date: Sun, 20 Oct 2019 13:44:17 +0300 Subject: [PATCH] [MSVCRT] Export __acrt_iob_func to fix GCC build with latest RosBE 2.2 (#1835) This adds an evil hack to persuade libstdc++, which tries to import __acrt_iob_func from a DLL. This can only be solved cleanly by adding a GCC-compatible C++ standard library to our tree later. --- sdk/lib/crt/msvcrtex.cmake | 3 ++- sdk/lib/crt/stdio/acrt_iob_func.c | 24 ++++++++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 sdk/lib/crt/stdio/acrt_iob_func.c diff --git a/sdk/lib/crt/msvcrtex.cmake b/sdk/lib/crt/msvcrtex.cmake index c46751007ad..5be20560a53 100644 --- a/sdk/lib/crt/msvcrtex.cmake +++ b/sdk/lib/crt/msvcrtex.cmake @@ -39,7 +39,8 @@ list(APPEND MSVCRTEX_SOURCE misc/fltused.c misc/isblank.c misc/iswblank.c - misc/ofmt_stub.c) + misc/ofmt_stub.c + stdio/acrt_iob_func.c) if(MSVC) list(APPEND MSVCRTEX_SOURCE diff --git a/sdk/lib/crt/stdio/acrt_iob_func.c b/sdk/lib/crt/stdio/acrt_iob_func.c new file mode 100644 index 00000000000..223ea36b5fa --- /dev/null +++ b/sdk/lib/crt/stdio/acrt_iob_func.c @@ -0,0 +1,24 @@ +/* + * PROJECT: ReactOS CRT library + * LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later) + * PURPOSE: __acrt_iob_func implementation + * COPYRIGHT: Victor Perevertkin + */ + +// Evil hack necessary, because we're linking to the RosBE-provided libstdc++ when using GCC. +// This can only be solved cleanly by adding a GCC-compatible C++ standard library to our tree. +#ifdef __GNUC__ + +#include + +/********************************************************************* + * __acrt_iob_func(MSVCRT.@) + */ +FILE * CDECL __acrt_iob_func(int index) +{ + return &__iob_func()[index]; +} + +const void* _imp____acrt_iob_func = __acrt_iob_func; + +#endif