2016-03-23 26 views
0

Visual Studio 2010で64ビットのプロジェクトをビルドするときに問題があります。私はライブラリを増強して64ビット用にビルドすることができませんでした。私は以下のエラーに陥っています。私は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. 

以下のコードには誤りがありますが、私はブーストライブラリを変更できません。私は

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

このエラーで混乱していますあなたは私を助けてくださいすることができ、

編集ありがとう:

私はどこにエラーを確認していないが、私はそのブーストライブラリに考えます

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

のようなcppファイルがあり、 "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 
    } 

回答は次の通りです:それは最終的に働いた
を! 2日の検索の後、私は別の方法を見つけました。私はちょうどそれがブーストbasic_timed_mutex.hppを使用していたプロジェクトヘッダーのインクルードパスの順序を変更しました。私はブーストパスを最上部に配置し、それはうまくいった。おかしいです!!!

+0

問題を示す最小限の完全な例を投稿してください。コンパイルして複製できるものです。どう思いますか?私たちはあなたのコードとコンパイラのすべてのコードを全面的に知ることができる最高インテリジェンスの存在ですか? –

+0

@richard更新しました。申し訳ありませんが、私はあなたに連絡することができませんでした。私はその経験をC++で持っていません – Raj

+0

コードはmanaged C++のように見えますが、それは合理的にはC++とは言えません。私はタグを更新しました。 –

答えて

1

私はこの同じ問題を自分自身で持っていました。これは、ブースト自体の特定のコードブロックに関連しているようです。これは、MSVCコンパイラツールチェーンのバグが原因であるようです。

無効に最適化は、多くのユーザーAs per this MSDN articleのための問題を解決するために表示されます - 私は問題が後押しするアップグレードすることで解決された問題について論理的な原因、あるいはバグレポートを提示しますが、自分のために可能性がしたいSource from MSDN suggesting this fixSouce on stack-overflow

1.60

しかし、他の用途ではtrailing-slashesが原因であると報告されています。

更新:

いくつかのブラウジング後は、テンプレートの種類に関数ポインタを保持しているものの、この問題は、無限ループからすべてが原因で発生することができ表示されます。実際のエラーの原因を正しく列挙しているわけではありません(エラーメッセージが表示されていない場所など)。つまり、最適化を無効にすると、普遍的な問題が解決されるように見えます。これは、ソフトウェアの実行速度が遅くなるためです。

+0

私はブーストをアップグレードしようとし、あなたに知らせるでしょう。ありがとう – Raj

+0

@Raj幸運、もしそれが最適化プラグマを試してください失敗した場合:https://msdn.microsoft.com/en-us/library/chh3fb0k.aspx –

+0

ありがとうございます。私はC++での経験はありません。私は、100以上のプロジェクトを含むアプリケーションのライブラリを構築しています。私は前にプラグマを使用したことはありません。私は関数の外でプラグマを使うべきだと読んだ。もちろん私は何かを増強することはできません。私はちょうど上記の関数を変更する必要があります(unlock())エラーが発生しているそれぞれのプロジェクトで呼び出されます。私は正しい? – Raj

関連する問題