5

Raspberry Pi 用の大規模プロジェクトをクロスコンパイルしようとしています。crosstool-ng、gcc バージョン 4.7.3 によって構築されたツールチェーンを使用しています。std::shared_future が表示されると、コンパイルが停止します。次のエラーが表示されます。

test.cpp:5:27: error: aggregate 'std::shared_future<int> xxx' has incomplete type and cannot be defined

そして、そのエラーを生成するソース ファイルは次のとおりです。

#include <future>

int main()
{
  std::shared_future<int> xxx;
  return 0;
}

この同じソース ファイルは、Rapsberry Pi 自体で正常にコンパイルされます。これは crosstool ツールチェーンのバグですか? 回避策はありますか? これを正常にコンパイルするにはどうすればよいですか?

4

2 に答える 2

3

前方宣言だけでなく実装クラスをshared_future使用するには、次のプリプロセッサ条件を true に等しくする必要があります。#if defined(_GLIBCXX_HAS_GTHREADS) && defined(_GLIBCXX_USE_C99_STDINT_TR1) && (ATOMIC_INT_LOCK_FREE > 1)

@juanchopanza への以前の回答によると、条件の次の部分が true に等しいようです。クラスif defined(_GLIBCXX_HAS_GTHREADS) && defined(_GLIBCXX_USE_C99_STDINT_TR1)の実装が必要であるためです。thread

最後に、条件のこの部分は false であると言えますATOMIC_INT_LOCK_FREE > 1

于 2013-04-21T21:20:29.400 に答える
2

この問題は、@backlash と Freenode の #gcc の助けを借りて解決しました。Crosstool-NG は 用のツールチェーンを構築していましたがarmv7、Raspberry Pi のコンパイラは 用にコンパイルしていましたarmv6。「アーキテクチャ レベル」([ターゲット オプション] > [アーキテクチャ レベル]) を変更armv6して、元の質問に投稿されたサンプル コードをコンパイルできるようにしました。--with-arch=armv6このオプションは、の設定フラグに を追加しますgcc。これが将来誰かに役立つことを願っています。

于 2013-04-24T19:15:47.910 に答える