3

我正在尝试使用我的发行版的默认编译器 GCC 6.2.1 构建一些 CUDA 代码(注意:不是 CUDA 正式支持的 GCC 版本,因此您可以将此称为实验性版本)。这是与 GCC 4.9.3 以及 CUDA 版本 7.5 和 8.0 一起构建的代码。

好吧,如果我构建以下(接近)最小示例:

#include <tuple>

int main() { return 0; }

使用命令行

nvcc -std=c++11 -Wno-deprecated-gpu-targets -o main main.cu

我收到以下错误:

/usr/local/cuda/bin/../targets/x86_64-linux/include/math_functions.h(8897): error: cannot overload functions distinguished by return type alone

/usr/local/cuda/bin/../targets/x86_64-linux/include/math_functions.h(8901): error: cannot overload functions distinguished by return type alone

2 errors detected in the compilation of "/tmp/tmpxft_000071fe_00000000-9_b.cpp1.ii".

这是为什么?我怎样才能纠正/规避这个?

4

1 回答 1

6

TL; DR:算了吧。仅将 CUDA 8.x 与 GCC 5.x 一起使用,并将 CUDA 9 或更高版本与 GCC 6.x 一起使用

似乎其他人已经在 GCC 6.1.x 中看到了这个问题,建议将以下标志添加到 nvcc:(-Xcompiler -D__CORRECT_ISO_CPP11_MATH_H_PROTO是的,两个连续的标志;有关详细信息,请参阅nvcc --help)。(但我不能报告完全成功,因为会弹出其他问题。)

但请记住,GCC 5.4.x 是最新的受支持版本,这可能是有充分理由的,因此强制 GCC 6.x 加入它有点疯狂——尤其是当 CUDA 9 现在可用时。

于 2016-10-03T12:19:46.257 回答