我正在开发一个包含两个模块的示例项目: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 的析构函数是非虚拟的,问题就消失了。