在OS X上编译Linux应用程序 - 未找到标准库(CMATH)

Compiling a Linux application on OS X - not finding standard library (cmath)

本文关键字:标准 CMATH OS 编译 应用程序 Linux      更新时间:2023-10-16

我正在尝试在Linux上编写的OS X上构建一个应用程序,但是我正在遇到辅助文件中的一系列错误。助手是表格的cmath上的包装器:

#include <cmath>
namespace [application name]
{   
  namespace math
  {
    template<typename T>
    inline T Log10(const T& x)
    {
      return T(log10(static_cast<double>(x)));
    }
  }
}

我会遇到表格错误:

/pathtofile/common/math/Helpers.t:132:16: error: use of undeclared identifier 'log10'; did you mean 'Log10'?
  return T(log10(static_cast<double>(x)));
           ^
/pathtofile/common/math/Helpers.t:130:14: note: 'Log10' declared here
inline T Log10(const T& x)

我已经对这个问题进行了一些研究,堆栈溢出的某人说:

我遇到了这个问题 - 这使我发疯,但我追踪了原因,这与我在这个问题上看到的报道有所不同。

在这种情况下,通用CMATH标头(或Math.h-在C 或C中出现的错误和解决方案)具有架构环境开关,以包括特定于体系结构的特定数学子标题。架构开关(环境变量)尚未定义,因此它是刺的,实际上并不包括真正定义数学功能的标题。

因此,确实有一个数学。就我而言,我没有定义架构变量,而是找到了正确的子数学标头的位置,并将其添加到我的编译路径中。然后该项目工作了!

这似乎是一个将Linux项目移植到OS-X时出现的问题。我想这可能发生在平台之间的项目中,以使标准库标题的安排不同。

这是问题吗?如果是这样,我该如何解决这个问题(我不确定如何遵循他的建议)?

编辑:如果我通过命名空间std引用数学函数,我会得到以下内容:

/pathtofile/common/math/Helpers.t:62:14: error: no member named 'acos' in namespace 'std'; did you mean 'ACos'?
  return std::acos(x);
         ^~~~~
/pathtofile/common/math/Helpers.t:60:14: note: 'ACos' declared here
inline T ACos(const T& x)

edit2:如果是相关的,我正在尝试使用CMAKE 3.0构建此项目。该代码本身孤立地运行良好,因此问题似乎在其他地方。

$ cat > chk.cpp
#include <cmath>
namespace app
{
    namespace math
    {
        template<typename T>
        inline T Log10(const T& x)
        {
            return T(log10(static_cast<double>(x)));
        }
    }
}
int main()
{
    return app::math::Log10(100.0);
}
$ c++ -std=c++14 chk.cpp
$ ./a.out
$ echo $?
2

我不认为问题在这里。