Каждый раз, когда я включаю boost в свой проект, я получаю миллион таких предупреждений. Кто-нибудь знает, как избавиться от предупреждений?
../depends\boost/config/abi_prefix.hpp(19) : warning C4103: 'depends\boost\config\abi_prefix.hpp' : alignment changed after including header, may be due to missing #pragma pack(pop)
Я знаю, что могу сделать #pragma, чтобы отключить предупреждение, но я хотел бы знать причину этих предупреждений.
Это часть повышения, и заголовок включается в кучу других заголовков повышения.
Просто наткнитесь на эту страницу: ffuts.org/blog/… Для меня это устраняет все предупреждающие сообщения. Снагар





Причина в том, что boost не вставляет / не вставляет эти прагмы в каждый файл, для которого нужны данные для упаковки. Они # включают отдельный файл, который выполняет push (abi_prefix.hpp), а затем еще один (abo_suffix.hp), который выполняет выталкивание.
Это позволяет им повсюду повторно использовать один и тот же код пакета #pragma, что удобно, поскольку он может различаться в зависимости от компилятора.
Хотя это совершенно безопасно. После #pragma push следует всплывающее сообщение, оно просто включено из другого файла. Так что вам, вероятно, следует просто отключить эту ошибку.
Да, вы получите это из директивы #pragma pack в config / abi / msvc_prefix.hpp. Это означает, что упаковка вашего проекта по умолчанию не 8. Это довольно необычно, это намеренно? Ошибки из-за различий в упаковке может быть немного сложно диагностировать.
Я нашел способ избавиться от этого предупреждения.
Вам необходимо отредактировать файл boost_1 _ ** \ boost \ config \ user.hpp и раскомментировать строку с помощью BOOST_DISABLE_ABI_HEADERS
Итак, вы должны определить в этом файле:
#define BOOST_DISABLE_ABI_HEADERS
Как только это будет сделано, просто строить с bjam, как обычно.
Пожалуйста, ознакомьтесь с комментариями ниже относительно опасностей этого решения.
Разве это не значит, что он никогда не позволяет упаковывать вещи? Похоже, это может привести к множеству забавных ошибок.
Это безопасно, если вы используете только свои собственные DLL-файлы boost или статически связываете их. Смотрите здесь: stackoverflow.com/questions/410981/…
По-прежнему кажется, что много проблем (и источника потенциальных ошибок) нужно предпринять, чтобы просто устранить предупреждение. Думаю, тебе лучше просто отключить это предупреждение. C#define, если вы скомпилируете boost с немного другими флагами компилятора, чем остальная часть вашего кода, последуют забавные сбои.
Вы также должны убедиться, что все используемые вами проекты имеют одинаковые настройки сборки. Exmaple, если у вас есть .lib. Я согласен с вами в целом, я собираюсь перекомпилировать без этого определения. Я сохраню этот пост для истории, чтобы люди могли его увидеть.
Чтобы уточнить, ошибка исчезает, если вы не включаете заголовок abi_prefix.hpp?