2013-04-14 17 views
11

ラズベリーパイに、C++ 11の機能を大量に使用する大きなプロジェクトを移植しようとしています。プロジェクトではCMAKEを使用していますが、クロスコンパイルにはcrosstool-ngを使用しています。 Piに依存関係をインストールしてローカルにコピーしましたが、CMAKEでそれらを見つけることができました。コードのいくつかは適切に構築され、ARM出力を生成します。しかし、コードの大部分はGCCの出力を混乱させて失敗します。私はC++ 11 /テンプレートのサポートと関係があります。例えば、私はこのようなエラーを取得:ラズベリーパイのC++ 11コードのクロスコンパイル

  • error: 'mutex' in namespace 'std' does not name a typeを(問題のファイルは<スレッド>が含まれており、私も<ミューテックス>、ないのx86のUbuntu上の要件が含まれている場合、このエラーが消える)

  • (ラインである{前:template<typename _Res> class __basic_future : public std::__future_base

    error: expected class-name before '{' token

  • error: '__result_type' does not name a type(これはおそらく、上記のエラーの起こる)

これらのエラーは、ARM g ++コンパイラのように、あまり多くのテンプレートがあまり好きではないようです。使用されているg ++のバージョンはarm-unknown-linux-gnueabi-g++ (crosstool-NG 1.18.0) 4.7.3 20130102 (prerelease)です。

誰でも正しい方向に向けることができますか?

編集:ここでgは++ ps内のファイルのいずれかのようになります。

arm-unknown-linux-gnueabi-g++ -DprojectCore_EXPORTS -fPIC 
-I/home/sagar/workspace/RaspberryPi/target_env/usr/include 
-I/home/sagar/workspace/RaspberryPi/target_env/usr/include/freetype2 
-I/home/sagar/workspace/RaspberryPi/target_env/usr/include/glib-2.0 
-I/home/sagar/workspace/RaspberryPi/target_env/usr/lib/arm-linux-gnueabihf/glib-2.0/include 
-I/home/sagar/workspace/RaspberryPi/target_env/usr/include/gdk-pixbuf-2.0 
-I/home/sagar/workspace/RaspberryPi/target_env/usr/include/gtk-2.0 
-I/home/sagar/workspace/RaspberryPi/target_env/usr/lib/arm-linux-gnueabihf/gtk-2.0/include 
-I/home/sagar/workspace/RaspberryPi/target_env/usr/include/cairo 
-I/home/sagar/workspace/RaspberryPi/target_env/usr/include/pango-1.0 
-I/home/sagar/workspace/RaspberryPi/target_env/usr/include/atk-1.0 
-I/home/sagar/workspace/RaspberryPi/target_env/usr/local/include 
-I/home/sagar/workspace/RaspberryPi/target_env/usr/include/eigen3 
-I/home/sagar/workspace/RaspberryPi/target_env/usr/include/flann 
-I/home/sagar/workspace/project/include -std=c++0x -Wall -Werror -Wno-deprecated -fPIC -g -O4 
-o CMakeFiles/projectCore.dir/src/project/Core/Memory/Array2D.C.o -c /home/sagar/workspace/project/src/project/Core/Memory/Array2D.C 
+0

'-std = C++ 11'おそらく? –

+0

@BartekBanachewiczファイルの1つに対して生成されたg ++コマンドを追加しました。 -std = C++ 0xがそこにあり、この時点でこれはC++ 11と同じだと思います。 – sagargp

+1

よく 'std :: mutex'は' '(または[それはここにあります](http://en.cppreference.com/w/cpp/thread/mutex))で定義されていますので、私はそうしませんそれはバグだと思います。あなたが求めていないヘッダーがx86バージョンに含まれているバグがあれば、とにかく許されている範囲を覚えていません。しかし、それを追加することはx86を破ることはありませんか?あなたは他のものに ''を#含んでいますか? – Rup

答えて

2

私が思う唯一のものは、次のとおりです。

  • -std=c++0xのparam
  • g++ compilerへのリンクのpthreadを設定します( -lpthread
  • あなたはarmv6のためにコンパイルしていることを確認する必要があります
1

このエラーの修正方法については、わかりません。しかし、大規模な画像処理コードのためにRPiでC++を扱う際に、同様のエラーが発生しました。すべての依存関係を時間通りにインストールすることで修正できませんでした。代わりに、私はそれがうまくコンパイルされたWindowsサーバー版/ Windows 7のコードを実行していたクラウド全体のコードを移動してしまった。あなたが時間に縛られている場合、ちょうど回避策のアイデア

関連する問題