私はboost.logを使用しています。実際にそれを取得して構築する極端な量のagroは別として、Windows 7とVistaでは正常に動作しています。Windows XPでboost.logがクラッシュするのはなぜですか?
私は現在Windows XP上でアプリケーションを使用しようとしていますが、boost.logは未処理の例外(Access violaton reading location 0x00000000
)で吹いています。
これはlog:mt_nt5::sources::aux::set_severity_level
メソッドで発生し、g_SeverityLevel
という静的グローバル変数を設定しようとします。
BOOST_LOG_NO_COMPILER_TLS
でビルドすることを提案したdocumentが見つかりました。私はこれを試みたが、うまくいかなかった。
I read furtherこれには、グローバル変数の周囲には__declspec(thread)
と宣言されている問題があり、そのスレッドは静的になります。これはVista以前のOSでの問題です。
boost.logに静的にリンクしていますので、私のプリプロセッサBOOST_LOG_NO_COMPILER_TLS
が認識されない理由を理解できません。
何か不足していますか?
更新:
がどんなにbjam
でLIBSを構築するとき、私は何をすべきか、私の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コマンドラインを使用していますか?
偶然、VC++を使用していて、 '/ clr'でコンパイルしていますか? – ildjarn
VC++(Visual Studio 2010)を使用していますが、/ clrを使用していません –
どのバージョンのXPですか? VC++ 2010では、ターゲットプラットフォームがXP SP2以上である必要があります。 – ildjarn