对共享库边界的继承

时间:2013-05-09 19:15:20

标签: c++ inheritance gcc shared-libraries

我有两个二进制文件,libA.so和exeB。 libA导出了许多函数,包括几个类。请考虑以下简化示例:

来自libA.so:

#define EXPORT __attribute__((visibility("default")))

class EXPORT Foo
{
public:
    EXPORT Foo(); // implemented in cpp
    EXPORT virtual ~Foo(); // implemented in cpp

    EXPORT virtual int func(int b); // implemented in cpp
};

class EXPORT Bar : public virtual Foo
{
public:
    EXPORT Bar(); // implemented in cpp
    EXPORT virtual ~Bar(); //implemented in cpp

    EXPORT virtual char anotherFunc(char d); //implemented in cpp
};

转到可执行文件B:

class Baz : public Bar
{
public:
    void useFuncAndAnotherFunc(); //implemented in cpp
};

在Baz.cpp中:

Foo *p = /* ... */;
Bar *q = dynamic_cast<Bar *>( p ); // The culprit

在编译阶段,我遇到以下错误:

undefined reference to `typeinfo for Foo'
undefined reference to `typeinfo for Bar'

即使我正在导出这些类的功能,编译器仍然抱怨。虚拟继承和虚函数是必需的,因为另一个项目C会覆盖它们(单元测试)。但是,项目C链接到此代码的静态库版本,并且没有给出错误。这似乎只适用于* .so变体。

有关如何解决此问题的任何想法?

0 个答案:

没有答案