我在共享库中有这个类:
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_EXPORT
为declspec(dllexport/dllimport
)`,这样可以正常工作,因为在导出虚函数时会导出vtable。
我当然可以输出全班:
类FOO_EXPORT接口{
但是,它也会导出所有内联方法。
是否存在导出~Interface()
和vtable的中间地带,但没有别的?
如果你知道:为什么GCC与MSVC不兼容?