Какой вред может принести определение BOOST_DISABLE_ABI_HEADERS при компиляции boost?

StackOverflow https://stackoverflow.com/questions/410981

  •  03-07-2019
  •  | 
  •  

Вопрос

Какой вред может принести определение BOOST_DISABLE_ABI_HEADERS при компиляции boost?

Из файла повышения:boost_1_37_0\boost\config\user.hpp

// BOOST_DISABLE_ABI_HEADERS: Stops boost headers from including any 
// prefix/suffix headers that normally control things like struct 
// packing and alignment. 
//#define BOOST_DISABLE_ABI_HEADERS

Почему Boost чувствует необходимость контролировать упаковку и выравнивание структур?

Возможно, это связано с сериализацией Boost и обеспечением одинаковой работы на всех платформах?Если я использую только Windows, могу ли я это безопасно определить?

Это было полезно?

Решение 3

Вот краткое описание определения BOOST_DISABLE_ABI_HEADERS:

  • Если вы используете некоторые общие библиотеки boost, вы получите неопределенное поведение.
  • Если вы статически ссылаетесь на свои библиотеки повышения или уверены, что используете только свои собственные библиотеки DLL, тогда вы можете быть в безопасности, продолжайте читать, почему я говорю «можно».
  • Если вы используете boost в нескольких .libs в своем проекте, все они должны иметь одинаковые настройки компилятора, поскольку изменение настроек компилятора может привести к изменению упаковки и выравнивания.
  • Я подозреваю, что совместимость между различными ОС и платформами (x86 и x64) может не работать для таких вещей, как ускоренная сериализация.

В целом, давать это определение не очень безопасно, и гораздо безопаснее оставить это в покое.

Другие советы

Определение гарантирует, что ABI (бинарный интерфейс приложения) остается совместимым между версиями и компиляторами.Без этого ваше приложение не могло бы использовать библиотеки boost, установленные другим приложением (которые могли быть скомпилированы с помощью другого компилятора, отличного от вашего).

Если вы статически связываетесь с boost или можете быть уверены, что ваше приложение использует только те библиотеки boost, которые вы сами для него скомпилировали, то да, вы можете смело определить это.Однако если вы не можете этого гарантировать, вы не должны это определять.

Вот что я смог найти в документации Boost:http://www.boost.org/doc/libs/1_31_0/libs/config/config.htm

Это довольно старая версия, но, по-видимому, значение #define не изменилось.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top