NVCC 失败并出现错误“_GLIBCXX_MATH_H”未定义”
NVCC fails with the error ""_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.h
、crt/math_functions.hpp
和 math_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
成功(除非出现其他错误),同时删除两者也会使警告消失。
我正在编译一个 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.h
、crt/math_functions.hpp
和 math_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
成功(除非出现其他错误),同时删除两者也会使警告消失。