0

ブーストをコンパイルするときに 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 のみを実行している場合、これを安全に定義できますか?

4

3 に答える 3

2

この定義により、ABI (アプリケーション バイナリ インターフェイス) がバージョン間およびコンパイラ間で互換性を保つことが保証されます。それがなければ、あなたのアプリケーションは別のアプリケーションによってインストールされたブースト dll を使用できませんでした (あなたのものとは異なるコンパイラでコンパイルされた可能性があります)。

ブーストに静的にリンクしている場合、またはアプリが独自にコンパイルしたブースト dll のみを使用することを保証できる場合は、はい、これを安全に定義できます。ただし、それを保証できない場合は、定義しないでください。

于 2009-01-04T13:46:13.177 に答える
1

Boostドキュメントで見つけたものは次のとおりです 。 http://www.boost.org/doc/libs/1_31_0/libs/config/config.htm

かなり古いバージョンですが、おそらく #define の意味は変わっていません。

于 2009-01-04T14:11:42.423 に答える
0

BOOST_DISABLE_ABI_HEADERS の定義の概要は次のとおりです。

  • 一部の共有ブースト DLL を使用すると、未定義の動作が発生します
  • ブースト ライブラリに静的にリンクしている場合、または独自の dll のみを使用していると確信している場合は、安全である可能性があります。
  • プロジェクト内の複数の .lib で boost を使用する場合、コンパイラ設定を変更するとパッキングとアライメントが異なる可能性があるため、それらはすべて同じコンパイラ設定である必要があります。
  • 異なる OS とプラットフォーム (x86 と x64) の間の互換性は、ブースト シリアライゼーションなどでは機能しない可能性があると思われます。

全体として、これを定義することはあまり安全ではなく、そのままにしておく方がはるかに安全です。

于 2009-01-04T15:08:32.230 に答える