我注意到,如果我在cxx11模式下使用跨ARM GCC版本4.9。*进行编译,则无法访问大多数标准库数学函数。 我试图编译Eigen,因为它有ARM优化,但这只适用于本机编译器。 原因是这些标准库函数都在防护标志内,这可能已被覆盖,直到4.8版本。*
#pragma once
#pragma GCC diagnostic push
#define RAND_MAX __RAND_MAX
#pragma GCC diagnostic ignored "-Wshadow"
#pragma GCC diagnostic ignored "-Wfloat-equal"
#define _GLIBCXX_USE_C99_FP_MACROS_DYNAMIC 1
#include <AP_Eigen/eigen/Eigen/Core>
#include <AP_Eigen/eigen/Eigen/Dense>
#pragma GCC diagnostic pop
自4.9。*我再次抱怨,因为在标准库中有更多无用的检查。例如。无法找到std :: lgamma,或者std :: max不存在.. 有人知道在4.9。*中绕过这些警卫标志的好方法吗?另外,我想知道为什么跨越GCC for ARM会这样做?没有理由这样做,因为代码在这些平台上100%运行,并且每个编译器版本都会变得越来越糟糕。