11

C++11 の機能を多用する大規模なプロジェクトを Raspberry Pi に移植しようとしています。このプロジェクトは CMAKE を使用しており、クロスコンパイルには crosstool-ng を使用しています。Pi に依存関係をインストールしてローカルにコピーしたところ、CMAKE でそれらを見つけることができました。一部のコードは正しくビルドされ、ARM 出力が生成されます。ただし、ほとんどのコードは、C++ 11/テンプレートのサポートに関係していると確信している混乱した GCC 出力で失敗します。たとえば、次のようなエラーが表示されます。

  • error: 'mutex' in namespace 'std' does not name a type(問題のファイルには <thread> が含まれており、x86 Ubuntu の要件ではなく、<mutex> も含めるとこのエラーはなくなります)

  • error: expected class-name before '{' token( { の前の行は: template<typename _Res> class __basic_future : public std::__future_base)

  • 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).

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

編集: のファイルの 1 つで 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
4

2 に答える 2

2

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

  • -std=c++0xパラメータをに設定g++ compiler
  • リンク pthread ( -lpthread)
  • コンパイルしていることを確認する必要がありますarmv6
于 2014-01-15T15:42:37.867 に答える
1

このエラーの修正方法がわからないことから始めましょう。しかし、大規模な画像処理コードのために RPi で C++ を使用しているときに、同様のエラーが発生しました。すべての依存関係を時間内にインストールしても修正できませんでした。代わりに、コード全体を、Windows サーバー版 / Windows 7 コードを実行しているクラウドに移動して、適切にコンパイルしました。時間に縛られている場合の回避策です。

于 2014-01-20T09:41:48.423 に答える