ein*_*ica 2 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]
Run Code Online (Sandbox Code Playgroud)
我在 Linux 上使用 CUDA 9.0 或 9.1,而 CUDA 使用 GCC(5 或 6)。为什么会发生这种情况,我该如何解决?
在 CUDA 9.0 和 9.1 中,nVIDIA 在检查某些宏已经定义之前使用它们有点草率。也就是说,事实上,一个排序的,一个与头文件的问题crt/math_functions.h
,crt/math_functions.hpp
以及math_functions.hpp
(在CUDA包括目录)。
但是,这通常不是实际问题,因为未定义的宏默认值为 0(在 C 中,也可能在 C++ 中)。事实上,默认情况下,gcc 和 nvcc 都不会抱怨。
但是,在您的情况下,某些事情使 GCC 运行-Wundef
,它会警告您这些情况,并且-Werror
将所有警告升级为错误。由于是在调用是你nvcc
,命令行(你,可能并没有自己写)可能具有-Xcompiler="-Wundef"
和-Xcompiler="-Werror"
地方。
删除这两个中的后者将nvcc
成功(除非其他错误),并且删除两者将使警告消失。