Raspberry Pi工具链上的std :: shared_future

时间:2013-04-21 17:19:52

标签: c++ c++11 cross-compiling raspberry-pi

我正在尝试为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工具链中的错误吗?有解决方法吗?如何才能成功编译?

2 个答案:

答案 0 :(得分: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类是非常的。

最后,我们可以说这部分情况是假的ATOMIC_INT_LOCK_FREE > 1

答案 1 :(得分:2)

我在@backlash和Freenode上的#gcc上的人的帮助下解决了这个问题。 Crosstool-NG正在为armv7构建工具链,而Raspberry Pi的编译器正在编译armv6。将“体系结构级别”(目标选项&gt;体系结构级别)更改为armv6,允许我编译原始问题中发布的示例代码。此选项将--with-arch=armv6添加到gcc的配置标志。希望这有助于将来的某个人。