std::在Raspberry Pi工具链上共享未来
std::shared_future on Raspberry Pi toolchain
我正试图为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
的配置标志中。希望这对将来的人有所帮助。
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 在Linux中哪里可以找到互斥、未来等的源代码
- 是否可以通过C++扩展强制多个python进程共享同一内存
- 在cuda线程之间共享大量常量数据
- 如何从具有移动语义的类对象中生成共享指针
- 在c代码之间共享数据的最佳方式
- 在两个类中共享相同的函数调用,并在不需要时避免空实例化
- 将静态库链接到不带-fPIC的共享库中
- C++:Application.cpp中抛出了未解析的外部符号(解决方案在问题的末尾,供未来的读者参考)
- 为什么std::互斥需要很长的、非常不规则的时间来共享
- 使用Boost Interprocess创建托管共享内存需要很长时间
- 使用 std::string () const 函数启动线程或未来
- 无法在Ubuntu上将共享库与Eclipse链接
- 从python调用openMP共享库时,未定义opnMP函数
- 在为LINUX创建共享库时,如何避免STL的私有/弱副本
- 为什么我的共享库中存在展开符号
- 使用共享指针的函数调用,其对象应为 const
- 函数范围的静态变量如何导致与共享库中函数代码的未来使用不兼容
- OpenGL-与未来的上下文共享现有纹理
- std::在Raspberry Pi工具链上共享未来