我有一个名为Menu的类,这个类用dll和exe编译。我有另一个名为ChildMenu的类继承自Menu,这个类也用dll和exe编译。
我在dll中有一个函数创建ChildMenu并将其作为Menu返回。
extern "C"
{
Menu* createMenu();
}
并实施
Menu* createMenu()
{
return new ChildMenu();
}
当我在dll中更改ChildMenu类的行为并重新编译它而不是在exe中时,类的行为不会更改,直到我在exe中更改类的行为并重新编译它。
ChildMenu覆盖了Menu方法之一。在重写方法中发生了行为更改。
我在dll中创建了ChildClass,但它的行为来自exe类。
为什么会这样?
问题是在gcc中默认导出共享库中的符号。我通过隐藏类的可见性来解决问题;