【问题标题】:How do I suppress C++ vtable generation for pure virtual classes using G++?如何使用 G++ 抑制纯虚拟类的 C++ vtable 生成?
【发布时间】:2011-12-03 22:17:04
【问题描述】:

可以在 MSVC 中使用 __declspec(novtable) 属性来抑制 C++ vtable 生成。但是,似乎there is no equivalent attribute 用于 GNU C++ 编译器。事实是,将 vtables 留给纯虚拟类不必要地链接到 __cxa_abort() 和许多其他人,我想避免这种情况发生,因为我正在为嵌入式系统编程。那么,我该怎么办?

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

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

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

【问题讨论】:

    标签: c++ gcc g++ virtual-functions vtable


    【解决方案1】:

    有些东西可以达到类似的结果:#pragma interface
    #pragma implementation 可以覆盖它,但是。
    http://www.emerson.emory.edu/services/gcc/html/CPP_Interface.html

    【讨论】:

      【解决方案2】:

      编译器标志-fno-rtti 停止运行时类型信息的生成。

      根据我在嵌入式平台上使用 C++ 的经验,这可以防止 vtable 编译器错误的发生,这表明它会阻止创建它们(因此,虚函数将不起作用)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-06-04
        • 1970-01-01
        • 2015-07-12
        • 1970-01-01
        • 2015-03-31
        • 1970-01-01
        • 2011-11-29
        • 1970-01-01
        相关资源
        最近更新 更多