Skip to content

Commit 4e30696

Browse files
committed
refs modelica#4576: Introduce name mangling to avoid MSVC duplicated symbols issue
1 parent 7560174 commit 4e30696

File tree

1 file changed

+16
-4
lines changed

1 file changed

+16
-4
lines changed

Modelica/Resources/C-Sources/gconstructor.h

+16-4
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,18 @@
2020
#ifndef G_CONSTRUCTOR_H_
2121
#define G_CONSTRUCTOR_H_
2222

23+
#ifndef G_MODEL_PREFIX
24+
#ifdef MODEL_IDENTIFIER
25+
#define G_MODEL_PREFIX MODEL_IDENTIFIER
26+
#else
27+
#define G_MODEL_PREFIX
28+
#endif
29+
#endif
30+
31+
#define G_CONCAT(a, b) a ## b
32+
#define G_CONCAT_(a, b) G_CONCAT(a, b)
33+
#define G_FUNCNAME(name) G_CONCAT_(G_MODEL_PREFIX, name)
34+
2335
#if defined(__cplusplus)
2436

2537
#define G_HAS_CONSTRUCTORS 1
@@ -53,18 +65,18 @@
5365
#define G_MSVC_SYMBOL_PREFIX "_"
5466
#endif
5567

56-
#define G_DEFINE_CONSTRUCTOR(_func) G_MSVC_CTOR (_func, G_MSVC_SYMBOL_PREFIX)
57-
#define G_DEFINE_DESTRUCTOR(_func) G_MSVC_DTOR (_func, G_MSVC_SYMBOL_PREFIX)
68+
#define G_DEFINE_CONSTRUCTOR(_func) G_MSVC_CTOR(_func, G_MSVC_SYMBOL_PREFIX)
69+
#define G_DEFINE_DESTRUCTOR(_func) G_MSVC_DTOR(_func, G_MSVC_SYMBOL_PREFIX)
5870

59-
#define G_MSVC_CTOR(_func,_sym_prefix) \
71+
#define G_MSVC_CTOR(_func, _sym_prefix) \
6072
static void _func(void); \
6173
extern int (* _array ## _func)(void); \
6274
int _func ## _wrapper(void) { _func(); return _array ## _func == NULL; } \
6375
__pragma(comment(linker,"/include:" _sym_prefix # _func "_wrapper")) \
6476
__pragma(section(".CRT$XCU",read)) \
6577
__declspec(allocate(".CRT$XCU")) int (* _array ## _func)(void) = _func ## _wrapper;
6678

67-
#define G_MSVC_DTOR(_func,_sym_prefix) \
79+
#define G_MSVC_DTOR(_func, _sym_prefix) \
6880
static void _func(void); \
6981
extern int (* _array ## _func)(void); \
7082
int _func ## _constructor(void) { atexit (_func); return _array ## _func == NULL; } \

0 commit comments

Comments
 (0)