我的共享库中有几个od类(.so)。一切顺利,直到我没有为我的一个课程添加新功能。 C ++编译器比给我现有的一个函数符号赋予不同的前缀,这打破了另一个应用程序的加载。
为了更好地解释它,我会写一个小例子,它不是基于真实来源或编译数据:
编译时:
class Foo1 {
public:
void func1();
void func2();
}
编译器将生成符号 _Ejjfunc1 和 _Ejlfunc2 。这些符号将位于共享库中。我将编译和链接我正在使用这些函数的应用程序。然后我将向库中添加新函数:
class Foo1 {
public:
void func1();
void func11();
void func2();
}
我将编译库并获取符号 _Ejjfunc1 , _Ejlfunc11 和 _Ejifunc2 。加载链接到 _Ejlfunc2 的应用程序已损坏,因为函数具有不同的前缀 _Eji 。
我该如何应对这种情况?我理解我不能删除函数,或者更改参数,因为它是库接口中的更改,但是添加新函数应该没问题,因此我不必创建新版本的库。
感谢您的任何意见。