我对Linux平台上的共享库进行了一些更改,并将更新的库发送给最终用户。最终用户报告说他们认为二进制兼容性已被破坏(不确定他们是如何知道的)。
我所做的更改是内部类(用户没有头文件):
我做了3个不同的改动:
哪些更改(如果有)可以破坏二进制兼容性,我应该如何添加静态变量以使其不破坏二进制兼容性?或者是添加一个通常安全的静态变量来保持二进制兼容性?
我所做的更改示例(由+
表示)
内部.h文件:
class A
{
protected:
+ static Mutex m;
}
内部cpp文件
void A::doSomething
{
+ m.Lock();
...
+ m.Unlock();
}
答案 0 :(得分:1)
所以我猜问题更通用,因为"添加静态变量会导致二进制兼容性问题,如果是这样,你如何避免这个问题?"
当然可能会导致问题。
最终用户可以执行任何数量的不受支持的操作,从将库的大小硬编码到程序中,踩到内存,将坏数据传递到库中,以便 it stomps用户的记忆等等
这些都与二进制兼容性无关。
您需要让最终用户解释他们所看到的完全。这可能更容易说,然后完成,因为最终用户可能有一个"破坏的电话"在你和实际观察失败的人之间。但已经发生,或者你永远不会取得进展。
答案 1 :(得分:0)
“二进制兼容性”可能与保存/加载或网络数据包有关。 或者他们可能遇到编译问题 - 在这种情况下,您可能使用不同的编译器/编译器版本构建它。
还要考虑struct pack值。您可以使用不同的struct pack设置具有不同的结构大小。