我正在编写一个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)。为什么会发生这种情况?我该如何解决?
答案 0 :(得分:2)
在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
成功(除非出现其他错误),删除这两项错误也会使警告消失。