0

我有两个二进制文件,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 变体。

有想法该怎么解决这个吗?

4

0 回答 0