繁体   English   中英

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

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

我试图在OS X上构建在Linux上编写的应用程序,但是我在助手文件中遇到了许多错误。 辅助程序是以下形式的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)

我已经对此问题进行了一些研究,Stack Overflow上的某人说:

我遇到了这个问题-这使我发疯,但我找到了原因,这与我所看到的有关该问题的报道有些不同。

在这种情况下,常规cmath标头(或math.h-错误和解决方案在C ++或C中发生)具有体系结构环境开关,以包括体系结构特定的数学子标头。 尚未定义体系结构开关(环境变量),因此它很麻烦,实际上并未包含真正定义数学函数的标头。

因此,确实只有一个math.h或cmath.h,它已包括在内,但这还不足以获取数学函数。 就我而言,我没有定义架构变量,而是找到了正确的子数学头的位置,并将其添加到我的编译路径中。 然后该项目成功了!

将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

我不认为问题出在这里。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM