为什么boost.log在Windows XP上崩溃?
Why does boost.log crash on Windows XP?
我使用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文件夹优先!
- 当回溯以零开始时,如何调试崩溃
- 内联映射初始化的动态atexit析构函数崩溃
- 执行函数时导致崩溃的变量
- 程序崩溃并显示"std::out_of_range"错误
- CoInitialize()在单独的线程上崩溃而不返回
- 使用调试/崩溃报告将应用程序部署到客户端
- 为什么所有C++编译器都会崩溃或挂起此代码
- 为什么lambda在clang上崩溃而不是在gcc上崩溃
- 为什么我的多线程作业队列崩溃
- ExtractIconEx:可以工作,但偶尔会崩溃
- 为什么引用传递会导致此崩溃(C++)
- 试图创建流或fopen时程序崩溃
- 类对象数组的问题会导致崩溃
- 排序时无法执行交换操作.我做的时候它会崩溃.为什么
- 为什么要增加导致崩溃的指针
- 为什么boost.log在Windows XP上崩溃?
- Windows XP下的CAtlStringMgr::GetInstance崩溃
- IoVolumeDeviceToDosName在Windows 7上崩溃,但在Windows XP上工作正常
- Gtkmm程序编译良好,但崩溃- windows XP
- 在Win7 64位上因未处理的首次机会异常而崩溃(在XP 32位、Linux 64位上没有问题)