我安装了 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 As
至 Compile 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/