Skip to content

Commit 9af8b61

Browse files
authored
fix: protobuf reflection on linux (#113)
1 parent 16944ed commit 9af8b61

3 files changed

Lines changed: 61 additions & 0 deletions

File tree

Engine/lib/libprotobuf.a

-17.2 MB
Binary file not shown.

Engine/src/memoverride_ms.cpp

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,62 @@ void __cdecl operator delete[](void* pMem)
5656
{
5757
g_pMemAlloc->Free(pMem);
5858
}
59+
#else
60+
61+
#include <new>
62+
63+
MS_IMPORT void* MemAlloc_AllocFunc(size_t nSize);
64+
MS_IMPORT void MemAlloc_FreeFunc(void* pMem);
65+
66+
void* operator new(size_t nSize)
67+
{
68+
return MemAlloc_AllocFunc(nSize);
69+
}
70+
71+
void* operator new[](size_t nSize)
72+
{
73+
return MemAlloc_AllocFunc(nSize);
74+
}
75+
76+
void* operator new(size_t nSize, const std::nothrow_t&) noexcept
77+
{
78+
return MemAlloc_AllocFunc(nSize);
79+
}
80+
81+
void* operator new[](size_t nSize, const std::nothrow_t&) noexcept
82+
{
83+
return MemAlloc_AllocFunc(nSize);
84+
}
85+
86+
void operator delete(void* pMem) noexcept
87+
{
88+
MemAlloc_FreeFunc(pMem);
89+
}
90+
91+
void operator delete[](void* pMem) noexcept
92+
{
93+
MemAlloc_FreeFunc(pMem);
94+
}
95+
96+
void operator delete(void* pMem, size_t) noexcept
97+
{
98+
MemAlloc_FreeFunc(pMem);
99+
}
100+
101+
void operator delete[](void* pMem, size_t) noexcept
102+
{
103+
MemAlloc_FreeFunc(pMem);
104+
}
105+
106+
void operator delete(void* pMem, const std::nothrow_t&) noexcept
107+
{
108+
MemAlloc_FreeFunc(pMem);
109+
}
110+
111+
void operator delete[](void* pMem, const std::nothrow_t&) noexcept
112+
{
113+
MemAlloc_FreeFunc(pMem);
114+
}
59115
#endif
60116

61117
void* AllocateMemory(size_t size)

Engine/src/protobufproxy.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,11 @@
2424
#include <google/protobuf/descriptor.h>
2525
#include <google/protobuf/message.h>
2626

27+
#ifndef PLATFORM_WINDOWS
28+
static_assert(_GLIBCXX_USE_CXX11_ABI == 0, "engine protobuf requires the pre-C++11 COW string ABI (_GLIBCXX_USE_CXX11_ABI=0)");
29+
static_assert(sizeof(std::string) == 8, "std::string layout is not the COW ABI - toolchain mismatch with the engine");
30+
#endif
31+
2732
bool ProtobufHasField(const google::protobuf::Message* message, const char* field)
2833
{
2934
const auto descriptor = message->GetDescriptor();

0 commit comments

Comments
 (0)