NVCC 失败并出现错误“未定义_GLIBCXX_MATH_H”
Posted
技术标签:
【中文标题】NVCC 失败并出现错误“未定义_GLIBCXX_MATH_H”【英文标题】:NVCC fails with the error ""_GLIBCXX_MATH_H" is not defined" 【发布时间】:2018-02-06 20:38:09 【问题描述】:我正在编译一个 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)。为什么会发生这种情况,我该如何解决?
【问题讨论】:
这应该有一个minimal reproducible example 你用的是什么编译器? @talonmies:看我的回答:-) @RobertCrovella:不是真的,因为我想明确说明答案与许多此类案例有关,而不是与一个非常具体的例子有关。 @einpoklum:问题是我有 CUDA 9 和 CUDA 9.1 以及我使用的平台上安装的每个受支持的 gcc 和 clang 版本,而我从来没有得到那个警告。永远。 【参考方案1】: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
成功(除非出现其他错误),并且删除这两个将使警告也消失。
【讨论】:
您是从crt
导入标头吗?
@talonmies:不。实际上,代码可能只是int main()
,仅此而已。以上是关于NVCC 失败并出现错误“未定义_GLIBCXX_MATH_H”的主要内容,如果未能解决你的问题,请参考以下文章
为啥 nvcc 失败允许将 T * 类型的指针转换为 void *?
使用gcc和nvcc编译时,eigen :: matrix反转的行为不同