我有两个二进制文件,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变体。
有关如何解决此问题的任何想法?