2016-10-27 5 views
4

Предположим, вы работаете над источником библиотеки, которая должна поддерживать совместимость с ABI. Эта библиотека содержит файл .c, который определяет static функцию как так:Будет ли удалять `static` из частной функции break ABI совместимость?

static int 
wl_message_count_arrays(const struct wl_message *message) 
{ 
    // ... 
} 

Эта функция не подвергается в каких-либо экспортируемых заголовков, но я хотел бы, чтобы выставить его в личном заголовке. Для этого функция не может быть помечена static. Удалил бы ли модификатор static сигнатуры функции ABI?

+1

* Изменение ABI * и * изменение ABI таким образом, чтобы он нарушал существующие программы * - это две разные вещи. Вы определенно делаете первый, но, возможно, не второй. – tofro

+1

Нет. Я предполагаю, что единственным риском является столкновение имен, если есть еще одна функция с тем же именем, но с другим интерфейсом. –

+0

@tofro Если вы добавите ответ, который объяснит ваш комментарий, я с радостью его выберу. – ybakos

ответ

2

Я думаю, что есть несколько моментов, которые необходимо учитывать:

  • ли изменить это в ABI?

    Да, потому что теперь появился новый общественный символ. Нет никакой разницы между добавлением новой функции и удалением static из существующей функции в отношении ABI.

  • Не нарушает ли он совместимость?

    Это определенно работает в другом направлении: программы, связанные с новой версией библиотеки, которые используют новый символ, не будут работать со старыми версиями библиотеки.

  • ОК, но как насчет пользователей старой библиотеки, которые хотят обновить?

    В этом случае существует вероятность, что они сами определяют символ с одним и тем же именем, что приводит к конфликтам с новой библиотекой. Технически это потрясающее изменение.

    Но если символ «с именами» (например, если все имена из библиотеки используют префикс foo_ и новый символ тоже), то я бы подумал об этом изменении нравственно не прерывая и новый совместимый с ABI со старым.

+0

Отличный ответ, спасибо! – ybakos

 Смежные вопросы

  • Нет связанных вопросов^_^