ラズベリーパイに、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
'-std = C++ 11'おそらく? –
@BartekBanachewiczファイルの1つに対して生成されたg ++コマンドを追加しました。 -std = C++ 0xがそこにあり、この時点でこれはC++ 11と同じだと思います。 – sagargp
よく 'std :: mutex'は' '(または[それはここにあります](http://en.cppreference.com/w/cpp/thread/mutex))で定義されていますので、私はそうしませんそれはバグだと思います。あなたが求めていないヘッダーがx86バージョンに含まれているバグがあれば、とにかく許されている範囲を覚えていません。しかし、それを追加することはx86を破ることはありませんか?あなたは他のものに ''を#含んでいますか? –
Rup