我试图交叉编译一个大项目为树莓派。 我使用的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的工具链中的错误? 有没有解决办法? 我如何能得到这个编译成功?
有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
。
我解决了这个问题,从@backlash帮助和人们对#gcc Freenode上。 crosstool的-NG是建设工具链armv7
,而树莓派的编译器编译了对armv6
。 更改“建筑水平”(目标选项>建筑等级)至armv6
,让我来编译张贴在我原来的问题的示例代码。 这个选项增加了--with-arch=armv6
的配置标志为gcc
。 希望这可以帮助别人出未来。