2016-03-23 5 views
0

У меня проблема при создании проекта в Visual Studio 2010 для 64-битного. Я не смог построить для 64-битной библиотеки boost, я становлюсь ниже ошибки. Я могу построить для 32-битного, но не для 64-битного.basic_timed_mutex.hpp (159): фатальная ошибка C1001: Внутренняя ошибка произошла в компиляторе

\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()); 
        } 
       } 
      } 

Можете ли вы помочь мне,

Спасибо

Отредактировано:

Я не уверен, где ошибка, но я думаю, что его в библиотеках наддува , существует файл cpp, такой как

Class a::a(, point,) 
{ 
} 

и "точка" - это пространство имен, которое является определены в заголовочном файле, который использует библиотеки подталкивания и имеет следующий код

#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. Я разместил boost, включив путь вверху, и он сработал. Странно!!!

+0

, пожалуйста, напишите минимальный полный пример, который показывает проблему - что-то, что мы можем скомпилировать и воспроизвести. Как вы думаете? Что мы - Высшие Разумные Существа, которые могут всего лишь знать ваш код, плюс весь код в компиляторе? –

+0

@richard Я обновил. Извините, если я не смогу связаться с вами. У меня нет такого опыта в C++ – Raj

+0

Код выглядит как управляемый C++, который не может считаться C++. Я обновил тег. –

ответ

1

У меня была такая же проблема сама - и, похоже, она связана с определенными блоками кода в самом импульсе. По-видимому, это вызвано ошибкой в ​​инструментальной цепочке компилятора MSVC.

Отключение оптимизации, как представляется, решить проблему для многих пользователей As per this MSDN article - Source from MSDN suggesting this fixSouce on stack-overflow

Я хотел бы представить логическую причину, или сообщение об ошибке по этому вопросу, но для меня эта проблема была решена путем модернизации для увеличения 1.60.

Кроме того, в других целях сообщается, что причиной является trailing-slashes!

обновление:

После некоторого просмотра он появляется эта проблема может быть вызвана всем от бесконечных петель, хотя типов шаблонов, имеющих указатели на функции. и не всегда правильно перечисляет фактический источник ошибки (например: это не то, о чем говорится в сообщении об ошибке). Тем не менее, устранение оптимизации, похоже, решает проблему почти повсеместно - за счет того, что ваше программное обеспечение может работать медленнее.

+0

Несомненно. Я попробую обновить boost и дам вам знать. Спасибо – Raj

+0

@Raj Удачи, если это не удается, попробуйте оптимизационную прагму: https://msdn.microsoft.com/en-us/library/chh3fb0k.aspx –

+0

спасибо. Я не так разбираюсь в C++.Я просто создаю библиотеки для приложения, которое содержит более 100 проектов. Раньше я никогда раньше не пользовался прагмой. Я читал, что прагма должна использоваться вне функции. Конечно, я не могу ничего изменить. Мне нужно изменить чуть выше, функция (unlock()) вызывается в соответствующем проекте, где я получаю ошибку. Я прав ? – Raj

Смежные вопросы