basic_timed_mutex.hpp(159):致命错误C1001:编译器

时间:2016-03-23 09:17:29

标签: visual-studio boost 64-bit managed-c++

我在64位Visual Studio 2010中构建项目时遇到问题。我无法使用boost库构建64位,我收到了以下错误。我可以为32位而不是64位构建。

    \boost_1_49_0\boost\thread\win32\basic_timed_mutex.hpp(159): fatal error C1001: An internal error has occurred in the compiler
(compiler file 'f:\dd\vctools\compiler\utc\src\p2\wvm\mdmiscw.c', line 2704)
5  To work around this problem, try simplifying or changing the program near the locations listed above.
5>  Please choose the Technical Support command on the Visual C++ 
5>   Help menu, or open the Technical Support help file for more information
5>  The command exited with code 2.

它指向下面的代码错误,当然我无法更改boost库。我对此错误感到困惑

void unlock()
            {
                long const offset=lock_flag_value;
                long const old_count=BOOST_INTERLOCKED_EXCHANGE_ADD(&active_count,lock_flag_value);
                if(!(old_count&event_set_flag_value) && (old_count>offset))
                {
                    if(!win32::interlocked_bit_test_and_set(&active_count,event_set_flag_bit))
                    {
                        win32::SetEvent(get_event());
                    }
                }
            }

你能帮我吗,

谢谢

编辑:

我不确定错误在哪里,但我认为它在boost库中,有一个像

这样的cpp文件
Class a::a(, point, )
{
}

和“point”是在头文件中定义的命名空间,该头文件使用boost库并且具有以下代码

#include <boost/thread.hpp>
#include <boost/thread/recursive_mutex.hpp>

    namespace point 
    {
// some work1
    void fun()
    {
    boost::unique_lock< boost::recursive_mutex > lck(*m_RedrawMutex);
// some work2
    }
// some work3
    }

答案:
它终于奏效了!!经过两天的搜索,我找到了另一种方法。我只是改变了使用boost basic_timed_mutex.hpp的项目标题中包含路径的顺序。我在顶部放置了增强包含路径并且它有效。真奇怪!!!

1 个答案:

答案 0 :(得分:1)

我自己也遇到了同样的问题 - 它似乎与boost本身的某些代码块有关。它似乎是由MSVC编译器工具链中的错误引起的。

停用优化似乎可解决许多用户的问题As per this MSDN article - Source from MSDN suggesting this fix Souce on stack-overflow

我希望我能提出一个合乎逻辑的原因或关于这个问题的错误报告,但对于我自己来说,问题是通过升级到Boost 1.60 解决的。

尽管如此,其他用途已经报道trailing-slashes是原因!

更新

经过一些浏览后,看起来这个问题可能是由无限循环的所有内容引起的,不过是持有函数指针的模板类型。并不总是正确列出错误的实际来源(例如:它不是错误消息所说的位置)。也就是说,禁用优化似乎可以解决普遍存在的问题 - 代价是软件运行速度较慢。