Portál AbcLinuxu, 4. listopadu 2025 23:26
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.