Безопасно ли упаковывать программное обеспечение С++ 11 в текущие дистрибутивы Linux?

В качестве стороннего разработчика в дистрибутиве Linux некоторые из пакетов, которые я обычно поддерживаю, начинают использовать функции С++ 11 в своей базе кода. Все они зависят от разных библиотек, упакованных в дистрибутивы Linux.

Проблемы с ABI могут появляться при смешивании кода С++ 11 с С++ 98 и AFAIK, большинство существующих основных дистрибутивов Linux не позволяют использовать С++ 11 по умолчанию при компиляции программного обеспечения для создания пакетов.

Вопрос: Как основные дистрибутивы Linux обрабатывают запись кода С++ 11? Есть ли достойный способ проверить или избежать этих проблем с ABI при использовании системных библиотек?

Спасибо.

Ответы

Ответ 1

Проблема не имеет ничего общего с С++ 11 vs С++ 98, за исключением того, что С++ 11 может мотивировать двоичные изменения. Нет ничего особенного в бинарных изменениях, мотивированных С++ 11. Они как раз нарушают или не ломаются, как обычные двоичные изменения. Кроме того, они меняются только в том случае, если разработчик библиотеки специально решает изменить свой двоичный интерфейс.

Другими словами, это не имеет ничего общего со стандартной версией и всем, что связано с библиотекой, если только библиотека явно не предлагает два разных двоичных интерфейса для разных стандартных версий (который по-прежнему является выбором библиотеки). За исключением этого случая, вы так же разбиты на С++ 98, как и на С++ 11. Itanium обратная совместимость между версиями, поддерживающими С++ 11, и версиями, поддерживающими С++ 98, поэтому ABI не компилируются.

Из памяти, если вы не используете 4.7.0, которые они сломали для удовольствия, а затем разблокировать, вы в значительной степени безопасны с помощью libstdС++ - они сохраняют разрыв ABI для будущей версии, когда они могут сделать один большой перерыв.

Иными словами, хотя переходный период до С++ 11 может ввести дополнительную мотивацию для разрыва ABI, и поэтому дополнительный риск, фактически используя С++ 11, не представляет дополнительного риска.