2016-05-20 2 views
2

Вкратце: когда я нарушаю ABI при работе с большими библиотеками C/C++, которые имеют потребителей и ожидают стабильности во всех независимых версиях?Устойчивость ABI: Когда я нарушаю ABI?

+0

Слишком широкое, что означает «используется конфиденциально»? Был ли он членом общедоступного класса? – SergeyA

+0

... можно удалить. Это не важно для вопроса слишком много. То же самое относится и к дополнениям функций. – eljefedelrodeodeljefe

+1

Это субъективный вопрос, каждая ситуация может иметь другой ответ. Если бизнес-потребности слишком велики, чтобы нарушить ABI из-за проблем с обслуживанием, тогда, возможно, сейчас не самое подходящее время для разрыва ABI. Если бизнес нуждается в оправдании, возможно, сейчас самое подходящее время. Это действительно зависит от ситуации –

ответ

3

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

С другой стороны, несовместимость ABI включает ошибки нестабильности/связывания, например, если библиотека была скомпилирована в системе System V versus ARM или скомпилирована с помощью libstdC++ или libC++. Это требует, чтобы вся библиотека была перекомпилирована для целевой системы.

+0

Не совместимость API - это подмножество несовместимости ABI? Представьте, что пользователи не использовали общедоступную функцию, поэтому теоретически код должен компилироваться, я полагаю. В любом случае ответа было бы достаточно для меня. – eljefedelrodeodeljefe

+2

@eljefedelrodeodeljefe _ «Не совместимость API - это подмножество несовместимости ABI?» _ Они являются ортогональными вещами. –

+0

@eljefedelrodeodeljefe, если у вас есть общедоступная функция, вы не можете гарантировать, что пользователи ее не использовали (если вы полностью не контролируете своих пользователей, и в этом случае зачем заботиться об ABI, когда вы могли просто заставить своих контролируемых пользователей повторно компилировать свой код). Некоторые изменения API (например, удаление публичной функции) нарушают ABI. Некоторые изменения API не обязательно. – user2079303

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