问题
Supressing C++ vtable generation can be done in MSVC using the __declspec(novtable)
attribute. However, it seems that there is no equivalent attribute for the GNU C++ compiler. The fact is that leaving the vtables for pure virtual classes unnecessarily links in __cxa_abort()
and many others, and I want to avoid this happening because I'm programming for an embedded system. So, what should I do?
struct ISomeInterface
{
virtual void Func() = 0;
};
class CSomeClass : public ISomeInterface
{
virtual void Func();
}
void CSomeClass::Func()
{
//...
}
回答1:
There is something that will achieve a similar result: #pragma interface
.#pragma implementation
can override this, however.
http://www.emerson.emory.edu/services/gcc/html/CPP_Interface.html
回答2:
The compiler flag -fno-rtti
stops run-time type information generation.
In my experience with C++ on embedded platforms, this has prevented vtable compiler errors from occurring, suggesting it prevents them from being created (and consequentially, virtual functions won't work).
来源:https://stackoverflow.com/questions/8371470/how-do-i-suppress-c-vtable-generation-for-pure-virtual-classes-using-g