如何在共享库中处理C ++生成的符号前缀

时间:2014-03-26 14:28:54

标签: c++ gcc shared-libraries symbols prefix

我的共享库中有几个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

我该如何应对这种情况?我理解我不能删除函数,或者更改参数,因为它是库接口中的更改,但是添加新函数应该没问题,因此我不必创建新版本的库。

感谢您的任何意见。

0 个答案:

没有答案