gpt4 book ai didi

c++ - 如何检查 arm-none-linux-gnueabi-g++ 对 C++11 的支持

转载 作者:可可西里 更新时间:2023-11-01 18:37:00 28 4
gpt4 key购买 nike

我正在编写一个可移植应用程序,它使用 C++11 功能,如 std::atomicstd::threads 等。如何验证我的 ARM GCC 交叉编译器工具链是否支持 C++11 标准?

我尝试使用 arm-none-linux-gnueabi-g++ -varm-none-linux-gnueabi-g++ --version但在使用 -std=c++11

时返回错误

编辑 # arm-linux-gnueabi-g++ -std=c++11 dum.cpp

cc1plus: 错误: 无法识别的命令行选项 '-std=c++11'

目标:arm-linux-gnueabi

海湾合作委员会版本 4.6.2

最佳答案

cxx0x support matrix . ARM Linux 以标准方式支持大多数功能。特定机器可能不支持某项功能是可能的。即,gcc 版本、linux 版本和 glibc 版本以及 CPU 类型都可以发挥作用。

测试 define __VERSION__ 看看编译器是否支持它。非常非常旧的 Linux 版本可能无法支持某些 CPU 类型; ARMv5 及更早版本。较新的 ARM CPU 有一些总线锁定指令,并且可以在没有任何或很少操作系统支持的情况下支持它。

echo | g++ -dM -E - | grep -i atomic

应该给出一个定义列表。如果您使用 -march=armv7 进行编译,您将获得最大的运气。然而,对于更新的 Linux 版本(以及针对此版本的编译器/glibc),即使是 -march=armv5 也可以在非 SMP 系统上运行。我认为 ARMv5 SMP 系统不可能存在。

如您所见,有许多工作部件,并且某些功能可能只知道在运行时工作。提供 list 可能是不可能的;您需要一个至少具有支持矩阵的 gcc 版本才能使该功能正常工作。

例如,使用相同的编译器但只有 -march=armv4-march=armv6

ARM v4

#define __GCC_ATOMIC_CHAR32_T_LOCK_FREE 1
#define __GCC_ATOMIC_WCHAR_T_LOCK_FREE 1
#define __GCC_ATOMIC_LONG_LOCK_FREE 1
#define __GCC_ATOMIC_POINTER_LOCK_FREE 1
#define __GCC_ATOMIC_INT_LOCK_FREE 1

armv6

#define __GCC_ATOMIC_CHAR32_T_LOCK_FREE 2
#define __GCC_ATOMIC_POINTER_LOCK_FREE 2
#define __GCC_ATOMIC_INT_LOCK_FREE 2
#define __GCC_ATOMIC_WCHAR_T_LOCK_FREE 2
#define __GCC_ATOMIC_LONG_LOCK_FREE 2

大多数现代智能手机都具有 armv7 或更高版本。

关于c++ - 如何检查 arm-none-linux-gnueabi-g++ 对 C++11 的支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20574808/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com