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 本身上编译成功。这是交叉工具工具链中的错误吗?有解决方法吗?我怎样才能让它成功编译?

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允许我编译原始问题中发布的示例代码。此选项将 a 添加--with-arch=armv6gcc. 希望这对将来的人有所帮助。

于 2013-04-24T19:15:47.910 回答