为什么在Windows XP上boost.log崩溃?
我正在使用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
的静态全局变量。
我发现了一个document,暗示与BOOST_LOG_NO_COMPILER_TLS
建设。我试过了,但没有奏效。
I read further进入此问题,并且问题似乎是全局变量被宣布为__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
文件夹中的内容,其内容是相同的!
因此,一个相关的问题可能现在是:am我正确使用bjam命令行?
它崩溃,因为它使用线程静态声明。正如上面链接的文章所述,如果包含日志代码的DLL使用LoadLibrary(它也覆盖了COM组件)加载,这会导致Vista之前的操作系统出现问题。
如果你有这样的问题,然后重新编译boost.log库,但don't forget to clear out your bin.v2 folder first!
我仍然有问题。我使用Boost作为Windows平台上的共享库,起诉VC++ 2010.它可以像正常的exe一样工作,但是在windows服务中使用boost日志时会崩溃。任何想法? – 2014-09-12 12:18:37
一次偶然的机会,您使用VC++与'/ clr'编制? – ildjarn 2011-12-22 19:28:28
我正在使用VC++(Visual Studio 2010),但没有使用/ clr – 2011-12-22 19:37:52
什么版本的XP? VC++ 2010要求目标平台至少为XP SP2。 – ildjarn 2011-12-22 19:58:26