相关疑难解决方法(0)

为什么在头文件中定义的C++虚函数可能无法在vtable中编译和链接?

情况如下.我有共享库,其中包含类定义 -

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架构_)

c++ virtual interface

6
推荐指数
1
解决办法
7041
查看次数

标签 统计

c++ ×1

interface ×1

virtual ×1