为什么boost.log会在Windows XP上崩溃?

时间:2011-12-22 19:25:45

标签: c++ multithreading boost bjam boost-log

我正在使用boost.log。除了实际获得和构建它的极端量agro之外,它在Windows 7和Vista上运行正常。

我现在正在尝试在Windows XP上使用该应用程序,但是boost.log正在处理未处理的异常(Access violaton reading location 0x00000000)。

这发生在方法log:mt_nt5::sources::aux::set_severity_level中,它尝试设置名为g_SeverityLevel的静态全局变量。

我发现document建议使用BOOST_LOG_NO_COMPILER_TLS进行构建。我尝试了这个,但它没有用。

read further进入此问题,问题似乎是全局变量被声明为__declspec(thread),这使得它成为静态线程。这只是Vista之前操作系统的一个问题。

我正在静态链接到boost.log,所以我无法弄清楚为什么我的预处理器BOOST_LOG_NO_COMPILER_TLS无法识别。

我错过了什么吗?

更新

无论在使用bjam构建lib时我做了什么,我的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命令行吗?

1 个答案:

答案 0 :(得分:2)

崩溃是因为它使用了线程静态声明。如上面链接的文章中所述,如果包含日志代码的DLL加载了LoadLibrary(也包含COM组件),则会导致Vista之前的操作系统出现问题。

如果您遇到此问题,请重新编译boost.log库,但don't forget to clear out your bin.v2 folder first

相关问题