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

Why does boost.log crash on Windows XP?

本文关键字:崩溃 XP Windows boost log 为什么      更新时间:2023-10-16

我使用boost.log。除了实际获取和构建它的大量农业之外,它在Windows 7和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之前的操作系统的问题。

我静态链接到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命令行?

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

如果您有这个问题,那么重新编译boost.log库,但是不要忘记清理您的bin。V2文件夹优先!