2011-12-03 9 views
8

Supresión de la generación de C++ vtable se puede hacer en MSVC utilizando el atributo __declspec(novtable). Sin embargo, parece que there is no equivalent attribute para el compilador GNU C++. El hecho es que al dejar los vtables para clases virtuales puras innecesariamente enlaces en __cxa_abort() y muchos otros, y quiero evitar que esto ocurra porque estoy programando para un sistema integrado. ¿Entonces qué debo hacer?¿Cómo suprimo la generación de vtable de C++ para clases virtuales puras utilizando G ++?

struct ISomeInterface 
{ 
    virtual void Func() = 0; 
}; 

class CSomeClass : public ISomeInterface 
{ 
    virtual void Func(); 
} 

void CSomeClass::Func() 
{ 
    //... 
} 

Respuesta

0

La bandera compilador -fno-rtti detiene la generación de información de tipo en tiempo de ejecución.

En mi experiencia con C++ en plataformas incrustadas, esto ha impedido que se produzcan errores de compilador de vtable, lo que sugiere que impide su creación (y, en consecuencia, las funciones virtuales no funcionarán).

Cuestiones relacionadas