Как сопровождающий в дистрибутиве Linux, некоторые из пакетов, которые я обычно поддерживаю, начинают использовать функции C ++ 11 в своей базе кода. Все они зависят от разных библиотек, поставляемых дистрибутивами Linux.
Проблемы с ABI может появиться при смешивании кода C ++ 11 с C ++ 98 и AFAIK, большинство современных основных дистрибутивов Linux не включают флаг C ++ 11 по умолчанию при компиляции программного обеспечения для генерации пакетов.
Вопрос в том: Как основные дистрибутивы Linux обрабатывают ввод кода C ++ 11? Есть ли достойный способ проверить или избежать этих проблем с ABI при использовании системных библиотек?
Благодарю.
Проблема не имеет ничего общего с C ++ 11 против C ++ 98, за исключением того, что C ++ 11 может мотивировать двоичные изменения. В бинарных изменениях, мотивированных C ++ 11, нет ничего особенного. Они так же ломаются или не ломаются, как обычные двоичные изменения. Кроме того, они изменяются только в том случае, если сопровождающий библиотеки специально решает изменить свой двоичный интерфейс.
Другими словами, это не имеет ничего общего со стандартной версией и не имеет ничего общего с библиотекой, если только библиотека явно не предложит два разных бинарных интерфейса для разных стандартных версий (что по-прежнему остается выбором библиотеки). За исключением этого случая, вы так же разбиты в C ++ 98, как и в C ++ 11. Itanium обратно совместим между версиями, поддерживающими C ++ 11, и версиями, поддерживающими C ++ 98, поэтому ABI компилятора не нарушены.
По памяти, если вы не используете 4.7.0, который они сломали для удовольствия, а затем не сломали, вы в значительной степени в безопасности с libstdc ++ — они сохраняют поломку ABI для будущего выпуска, когда они могут сделать один большой прорыв.
Другими словами, хотя переходный период к C ++ 11 может привнести дополнительную мотивацию для разрушения ABI и, следовательно, дополнительный риск, на самом деле с помощью Сам C ++ 11 не представляет дополнительного риска.