NVCC失败,错误“”_GLIBCXX_MATH_H“未定义”

时间:2018-02-06 20:38:10

标签: cuda nvcc compiler-options

我正在编写一个CUDA程序 - 一个简单而无害的程序。无论我如何简化它或删除一些代码或包含文件,nvcc告诉我:

In file included from /usr/local/cuda/bin/..//include/crt/common_functions.h:271:0,
                 from /usr/local/cuda/bin/..//include/common_functions.h:50,
                 from /usr/local/cuda/bin/..//include/cuda_runtime.h:115,
                 from <command-line>:0:
/usr/local/cuda/bin/..//include/crt/math_functions.h:8891:5: error: "_GLIBCXX_MATH_H" is not defined [-Werror=undef]

我在Linux上使用CUDA 9.0或9.1,而CUDA正在使用GCC(5或6)。为什么会发生这种情况?我该如何解决?

1 个答案:

答案 0 :(得分:2)

tl; dr:更改有问题的编译标志。

在CUDA 9.0和9.1中,nVIDIA在检查它们之前使用某些宏有点邋..这确实是头文件crt/math_functions.hcrt/math_functions.hppmath_functions.hpp(在CUDA包含目录中)的一个问题。

然而,这通常不是一个实际问题,因为an undefined macro defaults to a value of 0(在C中,也可能在C ++中)。事实上,默认情况下,gcc和nvcc都不会抱怨。

但是,在您的情况下,某些事情正在使GCC与-Wundef一起运行,这会警告您这些情况,而-Werror会将所有警告升级为错误。由于您调用的是nvcc,命令行(您可能自己没有自己编写)可能在某处-Xcompiler="-Wundef"-Xcompiler="-Werror"

删除后两者将使nvcc成功(除非出现其他错误),删除这两项错误也会使警告消失。