std::在Raspberry Pi工具链上共享未来

std::shared_future on Raspberry Pi toolchain

本文关键字:共享 未来 Pi Raspberry std 工具      更新时间:2023-10-16

我正试图为Raspberry Pi交叉编译一个大型项目。我使用的是由gcc版本4.7.3的crosstool ng构建的工具链。当看到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上成功编译。这是交叉工具工具链中的一个错误吗?有变通办法吗?如何才能成功编译?

要拥有shared_future实现类而不仅仅是正向声明,必须具有以下等于true的预处理器条件:#if defined(_GLIBCXX_HAS_GTHREADS) && defined(_GLIBCXX_USE_C99_STDINT_TR1) && (ATOMIC_INT_LOCK_FREE > 1)

根据你之前对@juancopanza的回答,似乎你有以下条件的一部分等于true:if defined(_GLIBCXX_HAS_GTHREADS) && defined(_GLIBCXX_USE_C99_STDINT_TR1),因为有必要实现thread类。

最后,我们可以说这部分条件是假ATOMIC_INT_LOCK_FREE > 1

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