5

プロジェクトにブーストを含めると、これらの警告が何百万も表示されます。誰かが私が警告を取り除くことができる方法を知っていますか?

../depends\boost/config/abi_prefix.hpp(19):警告C4103:'depends \ boost \ config \ abi_prefix.hpp':ヘッダーを含めた後に配置が変更されました。#pragmapack(pop)がないことが原因である可能性があります

#pragmaを実行して警告を無効にできることは知っていますが、これらの警告の理由を知りたいのですが。

4

3 に答える 3

6

その理由は、boostは、データをパックする必要があるすべてのファイルでこれらのプラグマをプッシュ/ポップするわけではないためです。#includeは、プッシュを実行する別のファイル(abi_prefix.hpp)と、その後にポップを実行する別のファイル(abo_suffix.hp)を含みます。

これにより、同じ#pragmaパックコードをどこでも再利用できます。これは、コンパイラによって異なる可能性があるため便利です。

しかし、それは完全に安全です。#pragmaプッシュの後にポップが続きます。これは別のファイルから含まれているだけです。したがって、おそらくそのエラーを無効にする必要があります。

于 2008-12-31T20:15:18.630 に答える
2

はい、config/abi/msvc_prefix.hpp の #pragma pack ディレクティブから取得できます。これは、プロジェクトのデフォルトのパッキングが 8 ではないことを示しています。これはかなり珍しいことですが、これは意図的なものですか? パッキングの違いによるバグは、診断が少し難しい場合があります。

于 2008-12-31T20:27:53.330 に答える
0

この警告を取り除く方法を見つけました。

ファイル boost_1_**\boost\config\user.hpp を編集し、BOOST_DISABLE_ABI_HEADERS の行のコメントを外す必要があります。

したがって、このファイルで次のように定義する必要があります。

#define BOOST_DISABLE_ABI_HEADERS

それが完了したら、通常どおり bjam でビルドします

このソリューションの危険性については、以下のコメントを参照してください

于 2009-01-04T01:22:24.517 に答える