如何在Xcode中导出虚拟破坏者

How to export the virtual destructor in Xcode?

本文关键字:虚拟 破坏者 Xcode      更新时间:2023-10-16

我正在研究一个带有两个模块的示例项目:a和b(链接到a),使用xcode 4.4。

在模块A中,符号由编译器标志-Fvisibility = Hidden隐藏。我有一个销售器虚拟和导出的班级:

class utx
{
    int mm;
public:
    __attribute__ ((visibility("default"))) utx(int m);
    __attribute__ ((visibility("default"))) virtual ~utx();
};

它被实现为:

utx::utx(int m) : mm(m) { }
utx::~utx() { }

在模块B中,myutx从UTX衍生如下:

class MyUtx : public utx
{
public:
    MyUtx() : utx(5) { }
    virtual ~MyUtx() { }
}Ins;

而,我总是以低于模块B的链接错误:

Undefined symbols for architecture x86_x64:
    "typeinfo for utx", referenced from:
        typeinfo for MyUtx in main.o

如果UTX的破坏者是非虚拟的,则问题消失了。

您是否尝试过:

class __attribute__ ((visibility("default"))) utx
{
  ...

根据http://gcc.gnu.org/wiki/visibility typeInfo生成取决于您的类是否具有VFPTR,并且添加虚拟驱动器可以更改(如果您没有其他虚拟功能)。