Portál AbcLinuxu, 5. května 2025 16:25
undefined reference to `typeinfo for cryptopp::CascadableOStreamBuffer'Problem umim vyresit tak, ze smazu z Makefile cryptopp "-no-rtti" prepinac v CXXFLAGS, nicmene to zpusobi, ze libcrypto++ zacne zaviset na dalsich sdilenych knihovnach a musim rucne vynutit instance nekterych sablon. Zajimalo by me, jestli jde nejak presvedcit g++ aby vygenerovalo rtti jeste jednou v nejakem mem modulu pripadne jine reseni, ktere nevyzaduje zasah do te sdilene knihovny. THX
dynamic_cast
, pak nepotřebujete RTTI (GCC generuje RTTI pro výjimky i s -fno-rtti
).
Pokud ale RTTI (dynamic_cast
) potřebujete, pak to lze řešit dvěma způsoby:
try { nejakaFunkcePouzivajiciThrowMistoReturn(); } catch (TridaProPretypovani &instance) { // Jako když se povede dynamic_cast } catch (...) { // Jako když dynamic_cast selže }
Class::~Class() { static void(Class::*orig)() = reinterpret_cast<void(Class::*)()>(dlsym("_ZN5ClassD2Ev", RTLD_NEXT)); this->*orig(); }
class AbsInterface { ... virtual ~AbsInterface {}; ... };Tak se pro destruktor vygeneruje RTTI a zaroven bude kod destruktoru weak symbol. Tzn ten symbol bude jak v hlavni aplikaci a tak i v .so knihovne a zadnou kolizi to nezpusobi.
Lexer *l = LexerFactTwoParmSing::Instance().create("OracleGuiLexer", filename);"OracleGuiLexer" - je "jmeno" tridy s implementaci(pod kterym byla zaregistrovana).
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.