c++ - VS 2015 的 HYPRE blas 构建错误

标签 c++ c windows visual-studio-2015 compiler-errors

我安装了 VS 2015 Professional。我安装了最新的HYPRE,来自Lawrence Livermore website 。然后我使用 CMake 配置它并继续构建,我开始收到 BLAS (dnrm2.c) 构建错误:

2>         dnrm2.c
2>     1>
C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt\math.h(454): error C2059: syntax error: '('

dnrm2.c中触发错误的代码行是:

#include "math.h"

指向文件:

c:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt\math.h

我查找了此错误并发现了一些建议,例如 this将包含更改为:

#include <cmath>

并在以下位置编辑 HYPRE 项目设置:Configuration > C/C++ > Advanced > Compile AsCompile As C++ (/TP)

我这样做了,但我仍然看到同样的错误,因为显然 cmath 也包含了 math.h 的相同 header 路径:

#else /* _STD_USING */
 #include <math.h>
#endif /* _STD_USING */

我什至尝试重新安装 VS 2015,但没有任何运气(同样的错误)。感谢任何关于这里发生的事情以及如何解决这个问题的想法。我想我可以在 VS 2015 中尝试一个包含 math.h 的极简示例并返返回告(如果有帮助的话)。

编辑 我的极简主义示例:

#include "math.h"

int main() {
  double d1 = sqrt(4.0);
  float d2 = abs(4.0);
  return 0;
} 

似乎构建正常。我尝试以与 C 编译(或 C++,没关系)相同的方式设置项目。但这并没有真正帮助我。

最佳答案

好吧,这里的问题是 HYPRE 源看起来像。他们在包含 math.h 之前将其包含在文件 f2c.h 中:

//#undef abs
//#define abs(x) ((x) >= 0 ? (x) : -(x))
//#endif

当我将其注释掉时(因为这已经在标准中定义),那么它就克服了该构建错误。当然,我遇到了其他构建错误。我正在尝试分别解决这些问题。

编辑:事情没有那么简单,因为他们(HYPRE)实际上依赖于他们自己的 abs 定义。因此,我撤消了上述内容并更改了一些包含的顺序,以便 undef 实际上有意义。不管怎样,这是一个 HYPRE 源代码问题。

关于c++ - VS 2015 的 HYPRE blas 构建错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40157602/

相关文章:

c++ - 调试断言失败 - 数组迭代器不兼容

c++ - 将两个线程设置为相同的 cpu 关联 pthread_getaffinity_np

c - FFMpeg hello world 失败

c++ - 如何接收使用 dbus 作为信号发送的结构?

c++ - Unicode 代码页 1200、1201、12000、12001 的 MultiByteToWideChar

windows - 在 Jenkins 中运行 bat 文件

C++ 连续序列概念

c++ - 为什么在重定向 stdout 和 stdin 时 Python 的行为不符合预期?

c - 如何创建映射到 GLib 中的数组的字典?

.net - WM_DESTROY、WM_CLOSE绕过IMessageFilter