GCC:如何在不导出整个类的情况下导出(选择的方法和)类的vtable / typeinfo?

时间:2015-04-18 12:00:10

标签: c++ gcc dllexport

我在共享库中有这个类:

class Interface {
    int m_ref;
public:
    FOO_EXPORT virtual ~Interface();
    virtual void foo() = 0;

protected:
    void ref() { ++m_ref; }
    bool deref() { return --m_ref; }
};

// cpp file:
Interface::~Interface() {}

GCC的FOO_EXPORT__attribute__((visibility=default)),我正在使用-fvisibiliy=hidden -fvisibility-inlines-hidden进行编译。

但是当我使用另一个库中的Interface时,我得到了typeinfo和vtable的未定义引用。

在MSVC上,FOO_EXPORTdeclspec(dllexport/dllimport)`,这样可以正常工作,因为在导出虚函数时会导出vtable。

我当然可以输出全班:

类FOO_EXPORT接口{

但是,它也会导出所有内联方法。

是否存在导出~Interface()和vtable的中间地带,但没有别的?

如果你知道:为什么GCC与MSVC不兼容?

0 个答案:

没有答案