Может ли добавление статической переменной нарушить бинарную совместимость в Linux?

Я внес некоторые изменения в общую библиотеку на платформе Linux и отправил обновленную библиотеку конечному пользователю. Конечный пользователь сообщил, что он считает, что двоичная совместимость была нарушена (не совсем уверен, откуда они это знают).

Внесенные мной изменения касались внутренних классов (у пользователя нет файлов заголовков):

Я сделал 3 разных изменения:

  1. добавили в класс защищенную статическую переменную-член (на самом деле защищать ее не нужно)
  2. добавил приватный статический член в класс
  3. добавил статическую переменную в файл cpp (в неанонимном пространстве имен)

Какие из этих изменений (если таковые имеются) могут нарушить бинарную совместимость и как мне добавить статическую переменную, чтобы она не нарушала бинарную совместимость? Или добавление статической переменной в целом безопасно для сохранения бинарной совместимости?

Пример изменения, которое я сделал (обозначается как +)

внутренний .h файл:

class A
{
protected:
+ static Mutex m;
}

внутренний файл cpp

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

1

Решение

Так что я думаю, что вопрос более общий: «Может ли добавление статической переменной вызвать проблемы двоичной совместимости, и если да, то как избежать этой проблемы?»

из курс это может вызвать проблемы.

Конечный пользователь может делать любое количество неподдерживаемых вещей, от жесткого кодирования размера вашей библиотеки до своей программы, до топания памяти, до передачи неверных данных в вашу библиотеку, чтобы Это топает память пользователя и т. д. и т. д.

Однако ни один из них не имеет ничего общего с двоичной совместимостью.

Вам нужно, чтобы конечный пользователь объяснил, что именно так они видят. Это может быть легче сказать, чем сделать, так как у конечного пользователя может быть «сломанный телефон» между вами и человеком, который фактически наблюдает сбой. Но это имеет случиться или ты никогда не добьешься прогресса.

1

Другие решения

«Двоичная совместимость», вероятно, связана с сохранением / загрузкой или сетевыми пакетами.
Или, может быть, у них есть проблемы с компиляцией — в этом случае, вероятно, вы собрали его с другой версией компилятора / компилятора.

Также рассмотрите значение struct pack. Вы можете иметь разный размер структуры с разными настройками пакета структуры.

0

По вопросам рекламы [email protected]