Cuda NVCC失败,错误为&引用_GLIBCXX“数学”;“未定义”;

Cuda NVCC失败,错误为&引用_GLIBCXX“数学”;“未定义”;,cuda,nvcc,compiler-options,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程序——一个简单无害的程序。无论我如何简化它或删除一些代码或包含文件,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]
在/usr/local/cuda/bin/。//include/crt/common_functions.h:271:0中包含的文件中,
来自/usr/local/cuda/bin/。//include/common_functions.h:50,
来自/usr/local/cuda/bin/。//include/cuda_runtime.h:115,
发件人:0:
/usr/local/cuda/bin/.//include/crt/math_functions.h:8891:5:错误:“\u GLIBCXX\u math_h”未定义[-Werror=undef]
我在Linux上使用CUDA 9.0或9.1,CUDA使用GCC(5或6)。为什么会发生这种情况?我如何解决它?

tl;dr:更改有问题的编译标志。 在CUDA9.0和9.1中,nVIDIA在检查某些宏是否已定义之前,对它们的使用有点草率。这确实是头文件
crt/math_functions.h
crt/math_functions.hpp
math_functions.hpp
(在CUDA包含目录中)的一种问题

但是,这通常不是一个实际问题,因为(在C中,也可能在C++中)。事实上,默认情况下,gcc和nvcc都不会抱怨

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


删除这两个选项中的后一个会使nvcc成功(除非出现其他错误),删除这两个选项也会使警告消失。

这应该有一个编译器,您使用的是什么?@Talonmes:请参阅我的答案:-)@RobertCrovella:不太可能,因为我想澄清的是,答案与许多这样的情况相关,而不是与一个非常具体的例子相关。@einpoklum:问题是我在使用的平台上安装了CUDA 9和CUDA 9.1以及所有受支持的gcc和clang版本,我从未收到过警告。曾经。您是否从
crt
导入标题?@talonmies:no。实际上,代码可以是
intmain(){}
,就是这样。