ブーストのコンパイル時にBOOST_DISABLE_ABI_HEADERSを定義すると、どのような害が生じる可能性がありますか?
質問
ブーストのコンパイル時にBOOST_DISABLE_ABI_HEADERSを定義すると、どのような悪影響がありますか?
ブーストファイルから: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
ブーストが構造体のパッキングとアライメントを制御する必要性を感じるのはなぜですか?
ブーストシリアル化と、すべてのプラットフォームで同じように動作することを確認する必要があるのでしょうか? Windowsのみを実行している場合、これを安全に定義できますか?
解決 3
BOOST_DISABLE_ABI_HEADERSの定義の概要は次のとおりです。
- 共有ブーストdllを使用すると、未定義の動作が発生します
- ブーストライブラリに静的にリンクしている場合、または独自のdllのみを使用していると確信している場合は、安全である可能性があります。理由を読んでください。
- プロジェクトの複数の.libでboostを使用する場合、コンパイラ設定を変更するとパッキングとアライメントが異なる可能性があるため、すべてのコンパイラ設定が同じコンパイラ設定である必要があります。
- 異なるOSとプラットフォーム(x86とx64)の間の互換性は、ブーストシリアル化のようなものでは機能しない可能性があると思います。
全体として、これを定義することはあまり安全ではなく、そのままにしておく方がはるかに安全です。
他のヒント
定義は、ABI(アプリケーションバイナリインターフェイス)がバージョンとコンパイラの間で互換性を保つことを保証します。 。 それなしでは、アプリケーションは、別のアプリケーションによってインストールされたブーストdllを使用できません(これは、あなたのコンパイラとは異なるコンパイラでコンパイルされている可能性があります)。
boostに静的にリンクする場合、またはアプリが自分でコンパイルしたboost dllのみを使用することを保証できる場合は、これを安全に定義できます。 ただし、それを保証できない場合は、定義しないでください。
Boostドキュメントで見つけることができるものは次のとおりです。 http://www.boost.org/doc/libs/ 1_31_0 / libs / config / config.htm
かなり古いバージョン用ですが、おそらく#defineの意味は変わっていません。