Добавляет ли добавление нового статического члена в промежуточную бинарную совместимость библиотеки C++?

У меня есть класс со многими статическими элементами, но я добавил новую функцию в середине файла заголовка.

Нарушает ли это бинарную совместимость? Клиенты нужно перекомпилировать?

EDIT (1): класс имеет только статические функции, никаких других функций и элементов данных.


person Baplix    schedule 01.02.2013    source источник
comment
Это может быть, например, если вы добавили виртуальный метод перед ранее определенным виртуальным методом. Похоже, что ответ может зависеть от компилятора, но я не знаю никаких гарантий, когда речь идет о двоичном расположении классов при изменении их определения.   -  person Joachim Isaksson    schedule 01.02.2013
comment
Класс имеет только статические функции, никаких других функций и элементов данных   -  person Baplix    schedule 01.02.2013


Ответы (1)


В вашем классе нет виртуальных функций, поэтому ваша новая промежуточная функция не изменит v-таблицу. Другие статические элементы в классе (функции и глобальные переменные/данные) вызываются с помощью соответствующего имени символа в Linux, Unix или Mac, и ваши изменения обратно совместимы.

Но это серьезное изменение в Windows, поскольку все функции вызываются по порядковому номеру, а не по имени (если только вы не используете файлы def для определения пользовательских порядковых номеров функций).

Попробуйте инструмент abi-cc для автоматической проверки обратной двоичной совместимости ваших библиотек.

person linuxbuild    schedule 04.02.2013