[英]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.