的std ::对树莓派工具链shared_future(std::shared_future on

2019-08-31 16:28发布

我试图交叉编译一个大项目为树莓派。 我使用的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皮本身。 这是crosstool的工具链中的错误? 有没有解决办法? 我如何能得到这个编译成功?

Answer 1:

shared_future实现类,而不只是向前声明,必须具备以下条件预处理等于真: #if defined(_GLIBCXX_HAS_GTHREADS) && defined(_GLIBCXX_USE_C99_STDINT_TR1) && (ATOMIC_INT_LOCK_FREE > 1)

根据以前的答案@juanchopanza,看来你有等于真实状况的以下部分: if defined(_GLIBCXX_HAS_GTHREADS) && defined(_GLIBCXX_USE_C99_STDINT_TR1)因为它是necarry有执行thread类。

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



Answer 2:

我解决了这个问题,从@backlash帮助和人们对#gcc Freenode上。 crosstool的-NG是建设工具链armv7 ,而树莓派的编译器编译了对armv6 。 更改“建筑水平”(目标选项>建筑等级)至armv6 ,让我来编译张贴在我原来的问题的示例代码。 这个选项增加了--with-arch=armv6的配置标志为gcc 。 希望这可以帮助别人出未来。



文章来源: std::shared_future on Raspberry Pi toolchain