Kee*_*Jan 13 c++ linux dynamic-cast dlopen dlsym
让我为这个长期问题道歉.它尽可能短,但不幸的是,它不是很短.
我定义了两个接口,A和B:
class A // An interface
{
public:
  virtual ~A() {}
  virtual void whatever_A()=0;
};
class B // Another interface
{
public:
  virtual ~B() {}
  virtual void whatever_B()=0;
};
然后,我有一个共享库"testc"构建类C的对象,同时实现A和B,然后传递指向它们的A接口的指针:
class C: public A, public B
{
public:
  C();
  ~C();
  virtual void whatever_A();
  virtual void whatever_B();
};
A* create()
{
  return new C();
}
最后,我有一个第二个共享库"testd",它接受一个A*输入,并尝试将其转换为a B*,使用dynamic_cast
void process(A* a)
{
  B* b = dynamic_cast<B*>(a);
  if(b)
    b->whatever_B();
  else
    printf("Failed!\n");
}
最后,我有主要的应用程序,A*在库之间传递:
A* a = create();
process(a);
如果我构建我的主应用程序,链接到'testc'和'testd'库,一切都按预期工作.但是,如果我修改主应用程序以不链接'testc'和'testd',而是使用dlopen/ 在运行时加载它们dlsym,则dynamic_cast失败.
我不懂为什么.有线索吗?
| 归档时间: | 
 | 
| 查看次数: | 6809 次 | 
| 最近记录: |