在OS X上编译Linux应用程序 - 未找到标准库(CMATH)
Compiling a Linux application on OS X - not finding standard library (cmath)
我正在尝试在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
我不认为问题在这里。
相关文章:
- 使用CMake检测支持的C++标准
- 如何理解C++标准N3337中的expr.const.cast子句8
- "throw expression code" 1e7 >返回 d 是什么?投掷标准::overflow_error( "too big" ) : d;意味 着?
- 编译标准库类型
- 标准是否使用多余的大括号(例如 T{{{10}}})定义列表初始化?
- cmath抛出错误C2062、C2059、C2143和C2447.cmath包含在矢量文件中
- 更新到莫哈韦后出现cmath错误
- 编译器如何在使用SFINAE的函数和标准函数之间确定两者是否可行
- 铸造标准::有没有回到原来的类型
- 标准 N3337 5.2.10 第 7 条中的C++"类型"是什么意思?
- this_thread::sleep_for和计时时钟之间的关系是否由C++11标准指定
- 标准库类型的赋值运算符的引用限定符
- 标准是否严格定义了该程序应该如何编译?
- 如何从Windows应用程序输出到标准?
- 为什么没有标准的C++数学库<math>而不是C包装器<cmath>?
- 为什么C++标准库不提供 cmath 函数的 constexpr 版本?
- 在OS X上编译Linux应用程序 - 未找到标准库(CMATH)
- C++标准是否需要"#include < math.h>"来定义""中的"abs"重载<cmath>?
- 我包含<cmath>但无法编译标准::abs(double)
- 标准对std::pow、std::log等cmath函数有什么规定?