[MSVCRT] Export __acrt_iob_func to fix GCC build with latest RosBE 2.2 (#1835)
authorVictor Perevertkin <victor@perevertkin.ru>
Sun, 20 Oct 2019 10:44:17 +0000 (13:44 +0300)
committerColin Finck <colin@reactos.org>
Sun, 20 Oct 2019 10:44:17 +0000 (12:44 +0200)
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
sdk/lib/crt/stdio/acrt_iob_func.c [new file with mode: 0644]

index c467510..5be2056 100644 (file)
@@ -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 (file)
index 0000000..223ea36
--- /dev/null
@@ -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 <victor.perevertkin@reactos.org>
+ */
+
+// 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 <precomp.h>
+
+/*********************************************************************
+ *    __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