我有两个二进制文件,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 变体。
有想法该怎么解决这个吗?