C++ 为什么boost.log在Windows XP上崩溃?
我正在使用boost.log。除了大量的实际获取和构建之外,它在Windows7和Vista上运行正常 我现在正试图在Windows XP上使用该应用程序,但boost.log出现未处理的异常(C++ 为什么boost.log在Windows XP上崩溃?,c++,multithreading,boost,bjam,boost-log,C++,Multithreading,Boost,Bjam,Boost Log,我正在使用boost.log。除了大量的实际获取和构建之外,它在Windows7和Vista上运行正常 我现在正试图在Windows XP上使用该应用程序,但boost.log出现未处理的异常(Access violaton读取位置0x00000000) 这发生在方法log:mt\u nt5::sources::aux::set\u severity\u level中,该方法尝试设置名为g\u SeverityLevel的静态全局变量 我发现了一个建议使用BOOST\u LOG\u NO\u编译
Access violaton读取位置0x00000000
)
这发生在方法log:mt\u nt5::sources::aux::set\u severity\u level
中,该方法尝试设置名为g\u SeverityLevel
的静态全局变量
我发现了一个建议使用BOOST\u LOG\u NO\u编译器\u TLS
构建的应用程序。我试过了,但没用
我对此进行了深入研究,问题似乎是全局变量被声明为\uu declspec(thread)
,这使得它是线程静态的。这只是Vista之前的操作系统的一个问题
我正在静态链接到boost.log,因此我无法理解为什么我的前置处理器boost\u log\u NO\u编译器\u TLS
没有被识别
我错过什么了吗
更新:
无论我在使用bjam
构建libs时做了什么,我的BOOST\u LOG\u No\u COMPILER\u 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命令行?它崩溃是因为它使用了线程静态声明。如上面链接的文章所述,如果包含日志记录代码的DLL加载了LoadLibrary(也包括COM组件),则在Vista之前的操作系统中会出现问题
如果存在此问题,请重新编译boost.log库,但是 碰巧,您正在使用VC++并使用
/clr
编译吗?我正在使用VC++(Visual Studio 2010),但没有使用/clr什么版本的XP?VC++2010要求目标平台至少为XP SP2。我仍然有问题。我在Windows平台上使用Boost作为共享库,使用VC++2010。它与普通exe一样工作,但在windows服务中使用boost日志时崩溃。有什么想法吗?