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コマンドラインを正しく使用していますか?