假设我有一个名为libplugin
的共享库。在此共享库中,有一类:类vtable如何在共享库上工作?
class Plugin
{
public:
virtual void doStuff();
};
让我们也假设有一个名为libspecialplugin
另一个共享库。它包含以下类和函数:
class SpecialPlugin : public Plugin
{
public:
virtual void doStuff();
};
Plugin *createSpecialPlugin()
{
return new SpecialPlugin;
}
现在,假设我改变了Plugin
并添加下面的方法:
virtual void doMoreStuff();
我不重新编译libspecialplugin
。
Plugin *plugin = createSpecialPlugin();
plugin->doMoreStuff();
我猜出现以下情况之一:
- 应用程序崩溃
- 的
Plugin::doMoreStuff()
方法被调用
我这样做的时候会发生什么
libspecialplugin
库是否包含信息tha t libplugin
可用于确定哪些方法被覆盖 - 即使在运行时?我对这里应该发生的事情有点模糊。
没有“共享库”这样的东西,这是一个矛盾。你所谈论的是共享对象代码,它像普通对象代码一样工作,只是总是独立定位(现在,常规对象代码通常是独立于位置的,但并不总是需要)。 – curiousguy