fix: remove non-inline __PIInit_Initializer__ definitions from piinit.h (ODR violation)
The stub member definitions lived in the header and were picked up by every TU including piinit.h, causing multiple-definition link errors in embedded (PIP_EMBEDDED) builds. Definitions now live only in piinit.cpp; the stub implementation is compiled in the '#else' branch guarded by PIP_HAS_THREADS (no-PIInit builds are unchanged).
This commit is contained in:
@@ -397,4 +397,25 @@ __PIInit_Initializer__::~__PIInit_Initializer__() {
|
||||
}
|
||||
}
|
||||
|
||||
#endif // _PIP_INIT_STUB_
|
||||
#else // _PIP_INIT_STUB_
|
||||
# ifdef PIP_HAS_THREADS
|
||||
int __PIInit_Initializer__::count_(0);
|
||||
PIInit * __PIInit_Initializer__::__instance__(0);
|
||||
|
||||
|
||||
__PIInit_Initializer__::__PIInit_Initializer__() {
|
||||
count_++;
|
||||
if (count_ > 1) return;
|
||||
__instance__ = nullptr;
|
||||
}
|
||||
|
||||
|
||||
__PIInit_Initializer__::~__PIInit_Initializer__() {
|
||||
count_--;
|
||||
if (count_ > 0) return;
|
||||
if (__instance__ != 0) {
|
||||
__instance__ = nullptr;
|
||||
}
|
||||
}
|
||||
# endif // PIP_HAS_THREADS
|
||||
#endif // _PIP_INIT_STUB_
|
||||
|
||||
@@ -55,30 +55,6 @@ public:
|
||||
|
||||
static __PIInit_Initializer__ __piinit_initializer__;
|
||||
|
||||
# ifdef _PIP_INIT_STUB_
|
||||
# ifndef PIINIT_MICRO_STUB_DEFINED
|
||||
# define PIINIT_MICRO_STUB_DEFINED
|
||||
|
||||
int __PIInit_Initializer__::count_ = 0;
|
||||
PIInit * __PIInit_Initializer__::__instance__ = nullptr;
|
||||
|
||||
__PIInit_Initializer__::__PIInit_Initializer__() {
|
||||
count_++;
|
||||
if (count_ > 1) return;
|
||||
__instance__ = nullptr;
|
||||
}
|
||||
|
||||
__PIInit_Initializer__::~__PIInit_Initializer__() {
|
||||
count_--;
|
||||
if (count_ > 0) return;
|
||||
if (__instance__ != nullptr) {
|
||||
__instance__ = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
# endif
|
||||
# endif
|
||||
|
||||
|
||||
//! \~\ingroup Core
|
||||
//! \~\brief
|
||||
|
||||
Reference in New Issue
Block a user