boost.logを使用しています。極端な量のアグロが実際にそれを取得して構築していることを除けば、Windows7とVistaでは問題なく実行されています。
現在、Windows XPでアプリケーションを使用しようとしていますが、boost.logが未処理の例外(Access violaton reading location 0x00000000
)で吹き飛ばされています。
log:mt_nt5::sources::aux::set_severity_level
これは、という名前の静的グローバル変数を設定しようとするメソッドで発生しますg_SeverityLevel
。
で構築することを提案するドキュメントを見つけましたBOOST_LOG_NO_COMPILER_TLS
。これを試しましたが、うまくいきませんでした。
これをさらに読みますが、問題はグローバル変数がとして宣言されている__declspec(thread)
ことにあるようです。これにより、スレッドが静的になります。これは、Vistaより前のOSでのみ問題になります。
boost.logに静的にリンクしているので、プリプロセッサBOOST_LOG_NO_COMPILER_TLS
が認識されない理由がわかりません。
私は何かが足りないのですか?
アップデート:
を使用してライブラリを構築するときに何をしてもbjam
、BOOST_LOG_NO_COMPILER_TLS
フラグが認識されません。私はこのように構築しています:
bjam address-model=32 --toolset=msvc-10.0 --build-type=complete
--with-log variant=debug link=static runtime-link=static
define=BOOST_LOG_NO_COMPILER_TLS stage
stage
このフラグがある場合とない場合でビルドした後のフォルダー内の出力の内容を比較しましたが、内容は同じです。
したがって、関連する質問はおそらく次のようになります 。bjamコマンドラインを正しく使用していますか?