1

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が認識されない理由がわかりません。

私は何かが足りないのですか?

アップデート:

を使用してライブラリを構築するときに何をしてもbjamBOOST_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コマンドラインを正しく使用していますか?

4

1 に答える 1

2

スレッド静的宣言を使用しているため、クラッシュします。上記のリンク先の記事で説明されているように、ロギングコードを含むDLLがLoadLibrary(COMコンポーネントもカバー)でロードされている場合、Vistaより前のOSで問題が発生します。

この問題が発生した場合は、boost.logライブラリを再コンパイルしますが、最初にbin.v2フォルダーをクリアすることを忘れないでください

于 2011-12-23T11:42:12.273 に答える