Как экспортировать виртуальный деструктор в Xcode?

Я работаю над примером проекта с двумя модулями: 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 не виртуален, проблема исчезнет.

1

Решение

Ты пытался:

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

В соответствии с http://gcc.gnu.org/wiki/Visibility Генерирование typeinfo зависит от того, имеет ли ваш класс vfptr, и добавление виртуального деструктора может изменить это (если у вас нет других виртуальных функций).

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]