Xcode 4.4を使用して、AとB(Aにリンク)の2つのモジュールを含むサンプルプロジェクトに取り組んでいます。
モジュール 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 のデストラクタが非仮想の場合、問題はなくなります。