NVCC 失败并显示错误" " _GLIBCXX_MATH_H " is not defined"



我正在编译一个 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)。为什么会发生这种情况,我该如何解决?

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

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

但是,这通常不是实际问题,因为未定义的宏默认为值 0(在 C 中,也可能在 C++ 中)。事实上,默认情况下,GCC 和 nvcc 都不会抱怨。

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

删除这两个中的后者将使nvcc成功(除非其他错误),删除这两个将使警告也消失。

相关内容

最新更新