情况如下.我有共享库,其中包含类定义 -
QueueClass : IClassInterface
{
virtual void LOL() { do some magic}
}
Run Code Online (Sandbox Code Playgroud)
我的共享库初始化类成员
QueueClass *globalMember = new QueueClass();
Run Code Online (Sandbox Code Playgroud)
我的共享库导出C函数返回指向globalMember的指针 -
void * getGlobalMember(void) { return globalMember;}
Run Code Online (Sandbox Code Playgroud)
我的应用程序像这样使用globalMember
((IClassInterface*)getGlobalMember())->LOL();
Run Code Online (Sandbox Code Playgroud)
现在非常简单的东西 - 如果我不从共享库引用LOL,那么LOL没有链接并从应用程序调用它引发异常.原因 - VTABLE包含nul代替指向LOL()函数的指针.
当我将.L文件中的LOL()定义移动到.cpp时,突然它出现在VTABLE中,一切都很好.是什么解释了这种行为?!(gcc编译器+ ARM架构_)