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:
2026-08-22 13:46:35 +03:00
parent 858d205fd3
commit b82ad8e6cd
2 changed files with 22 additions and 25 deletions
+22 -1
View File
@@ -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_
-24
View File
@@ -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