可以在Linux上添加静态变量中断二进制兼容性吗?

时间:2016-04-26 18:50:27

标签: c++ linux shared-libraries binary-compatibility

我对Linux平台上的共享库进行了一些更改,并将更新的库发送给最终用户。最终用户报告说他们认为二进制兼容性已被破坏(不确定他们是如何知道的)。

我所做的更改是内部类(用户没有头文件):

我做了3个不同的改动:

  1. 将一个受保护的静态成员变量添加到一个类(实际上不需要保护)
  2. 将一个私有静态成员添加到类
  3. 将一个静态变量添加到cpp文件(在非匿名命名空间中)
  4. 哪些更改(如果有)可以破坏二进制兼容性,我应该如何添加静态变量以使其不破坏二进制兼容性?或者是添加一个通常安全的静态变量来保持二进制兼容性?

    我所做的更改示例(由+表示)

    内部.h文件:

    class A
    {
    protected:
        + static Mutex m;
    }
    

    内部cpp文件

    void A::doSomething
    {
        + m.Lock();
        ...
        + m.Unlock();
    }
    

2 个答案:

答案 0 :(得分:1)

  

所以我猜问题更通用,因为"添加静态变量会导致二进制兼容性问题,如果是这样,你如何避免这个问题?"

当然可能会导致问题。

最终用户可以执行任何数量的不受支持的操作,从将库的大小硬编码到程序中,踩到内存,将坏数据传递到库中,以便 it stomps用户的记忆等等

这些都与二进制兼容性无关。

您需要让最终用户解释他们所看到的完全。这可能更容易说,然后完成,因为最终用户可能有一个"破坏的电话"在你和实际观察失败的人之间。但已经发生,或者你永远不会取得进展。

答案 1 :(得分:0)

“二进制兼容性”可能与保存/加载或网络数据包有关。 或者他们可能遇到编译问题 - 在这种情况下,您可能使用不同的编译器/编译器版本构建它。

还要考虑struct pack值。您可以使用不同的struct pack设置具有不同的结构大小。

相关问题