Cuda 编译错误:已定义类模板
Cuda compilation error: class template has already been defined
我是 cuda 的新手,并尝试运行我在网上找到的一个简单的矢量添加示例以开始使用。我正在使用win10 64bit和Visual Studio 2017。
#include "cuda_runtime.h"
#include "cuda.h"
#include "device_launch_parameters.h"
#include <iostream>
#include <math.h>
// Kernel function to add the elements of two arrays
__global__
void add(int n, float *x, float *y)
{
int index = threadIdx.x;
int stride = blockDim.x;
for (int i = index; i < n; i += stride)
y[i] = x[i] + y[i];
}
int main(void)
{
int N = 1 << 20;
float *x, *y;
// Allocate Unified Memory – accessible from CPU or GPU
cudaMallocManaged(&x, N * sizeof(float));
cudaMallocManaged(&y, N * sizeof(float));
// initialize x and y arrays on the host
for (int i = 0; i < N; i++) {
x[i] = 1.0f;
y[i] = 2.0f;
}
// Run kernel on 1M elements on the GPU
add <<<1, 1 >>>(N, x, y);
// Wait for GPU to finish before accessing on host
cudaDeviceSynchronize();
// Check for errors (all values should be 3.0f)
float maxError = 0.0f;
for (int i = 0; i < N; i++)
maxError = fmax(maxError, fabs(y[i] - 3.0f));
std::cout << "Max error: " << maxError << std::endl;
// Free memory
cudaFree(x);
cudaFree(y);
return 0;
}
我使用了"VS2017的开发人员命令提示符",因为窗口的命令提示符给了我
nvcc fatal : Cannot find compiler 'cl.exe' in PATH
在线解决方案对我不起作用。然后我运行了这个命令(--编译器-选项已经解决了一些错误(
nvcc add.cu --compiler-options "-D _WIN64"
但是编译器仍然给我错误
C:ProgrammingMicrosoft Visual Studio2017CommunityVCToolsMSVC14.14.26428includetype_traits(95): error: class template "std::_Is_function" has already been defined
C:ProgrammingMicrosoft Visual Studio2017CommunityVCToolsMSVC14.14.26428includetype_traits(95): error: class template "std::_Is_function" has already been defined
C:ProgrammingMicrosoft Visual Studio2017CommunityVCToolsMSVC14.14.26428includetype_traits(95): error: class template "std::_Is_function" has already been defined
C:ProgrammingMicrosoft Visual Studio2017CommunityVCToolsMSVC14.14.26428includetype_traits(95): error: class template "std::_Is_function" has already been defined
C:ProgrammingMicrosoft Visual Studio2017CommunityVCToolsMSVC14.14.26428includetype_traits(95): error: class template "std::_Is_function" has already been defined
C:ProgrammingMicrosoft Visual Studio2017CommunityVCToolsMSVC14.14.26428includetype_traits(95): error: class template "std::_Is_function" has already been defined
C:ProgrammingMicrosoft Visual Studio2017CommunityVCToolsMSVC14.14.26428includetype_traits(95): error: class template "std::_Is_function" has already been defined
C:ProgrammingMicrosoft Visual Studio2017CommunityVCToolsMSVC14.14.26428includetype_traits(95): error: class template "std::_Is_function" has already been defined
C:ProgrammingMicrosoft Visual Studio2017CommunityVCToolsMSVC14.14.26428includetype_traits(95): error: class template "std::_Is_function" has already been defined
C:ProgrammingMicrosoft Visual Studio2017CommunityVCToolsMSVC14.14.26428includetype_traits(95): error: class template "std::_Is_function" has already been defined
C:ProgrammingMicrosoft Visual Studio2017CommunityVCToolsMSVC14.14.26428includetype_traits(95): error: class template "std::_Is_function" has already been defined
C:ProgrammingMicrosoft Visual Studio2017CommunityVCToolsMSVC14.14.26428includetype_traits(95): error: class template "std::_Is_function" has already been defined
C:ProgrammingMicrosoft Visual Studio2017CommunityVCToolsMSVC14.14.26428includetype_traits(95): error: class template "std::_Is_function" has already been defined
C:ProgrammingMicrosoft Visual Studio2017CommunityVCToolsMSVC14.14.26428includetype_traits(95): error: class template "std::_Is_function" has already been defined
C:ProgrammingMicrosoft Visual Studio2017CommunityVCToolsMSVC14.14.26428includetype_traits(95): error: class template "std::_Is_function" has already been defined
C:ProgrammingMicrosoft Visual Studio2017CommunityVCToolsMSVC14.14.26428includetype_traits(95): error: class template "std::_Is_function" has already been defined
C:ProgrammingMicrosoft Visual Studio2017CommunityVCToolsMSVC14.14.26428includetype_traits(95): error: class template "std::_Is_function" has already been defined
C:ProgrammingMicrosoft Visual Studio2017CommunityVCToolsMSVC14.14.26428includetype_traits(95): error: class template "std::_Is_function" has already been defined
C:ProgrammingMicrosoft Visual Studio2017CommunityVCToolsMSVC14.14.26428includetype_traits(95): error: class template "std::_Is_function" has already been defined
C:ProgrammingMicrosoft Visual Studio2017CommunityVCToolsMSVC14.14.26428includetype_traits(95): error: class template "std::_Is_function" has already been defined
C:ProgrammingMicrosoft Visual Studio2017CommunityVCToolsMSVC14.14.26428includetype_traits(95): error: class template "std::_Is_function" has already been defined
C:ProgrammingMicrosoft Visual Studio2017CommunityVCToolsMSVC14.14.26428includetype_traits(95): error: class template "std::_Is_function" has already been defined
C:ProgrammingMicrosoft Visual Studio2017CommunityVCToolsMSVC14.14.26428includetype_traits(95): error: class template "std::_Is_function" has already been defined
C:ProgrammingMicrosoft Visual Studio2017CommunityVCToolsMSVC14.14.26428includetype_traits(95): error: class template "std::_Is_function" has already been defined
C:ProgrammingMicrosoft Visual Studio2017CommunityVCToolsMSVC14.14.26428includetype_traits(139): error: class template "std::_Is_memfunptr" has already been defined
C:ProgrammingMicrosoft Visual Studio2017CommunityVCToolsMSVC14.14.26428includetype_traits(139): error: class template "std::_Is_memfunptr" has already been defined
C:ProgrammingMicrosoft Visual Studio2017CommunityVCToolsMSVC14.14.26428includetype_traits(139): error: class template "std::_Is_memfunptr" has already been defined
C:ProgrammingMicrosoft Visual Studio2017CommunityVCToolsMSVC14.14.26428includetype_traits(139): error: class template "std::_Is_memfunptr" has already been defined
C:ProgrammingMicrosoft Visual Studio2017CommunityVCToolsMSVC14.14.26428includetype_traits(139): error: class template "std::_Is_memfunptr" has already been defined
C:ProgrammingMicrosoft Visual Studio2017CommunityVCToolsMSVC14.14.26428includetype_traits(139): error: class template "std::_Is_memfunptr" has already been defined
C:ProgrammingMicrosoft Visual Studio2017CommunityVCToolsMSVC14.14.26428includetype_traits(139): error: class template "std::_Is_memfunptr" has already been defined
C:ProgrammingMicrosoft Visual Studio2017CommunityVCToolsMSVC14.14.26428includetype_traits(139): error: class template "std::_Is_memfunptr" has already been defined
C:ProgrammingMicrosoft Visual Studio2017CommunityVCToolsMSVC14.14.26428includetype_traits(139): error: class template "std::_Is_memfunptr" has already been defined
C:ProgrammingMicrosoft Visual Studio2017CommunityVCToolsMSVC14.14.26428includetype_traits(139): error: class template "std::_Is_memfunptr" has already been defined
C:ProgrammingMicrosoft Visual Studio2017CommunityVCToolsMSVC14.14.26428includetype_traits(139): error: class template "std::_Is_memfunptr" has already been defined
C:ProgrammingMicrosoft Visual Studio2017CommunityVCToolsMSVC14.14.26428includetype_traits(139): error: class template "std::_Is_memfunptr" has already been defined
C:ProgrammingMicrosoft Visual Studio2017CommunityVCToolsMSVC14.14.26428includetype_traits(139): error: class template "std::_Is_memfunptr" has already been defined
C:ProgrammingMicrosoft Visual Studio2017CommunityVCToolsMSVC14.14.26428includetype_traits(139): error: class template "std::_Is_memfunptr" has already been defined
C:ProgrammingMicrosoft Visual Studio2017CommunityVCToolsMSVC14.14.26428includetype_traits(139): error: class template "std::_Is_memfunptr" has already been defined
C:ProgrammingMicrosoft Visual Studio2017CommunityVCToolsMSVC14.14.26428includetype_traits(139): error: class template "std::_Is_memfunptr" has already been defined
C:ProgrammingMicrosoft Visual Studio2017CommunityVCToolsMSVC14.14.26428includetype_traits(139): error: class template "std::_Is_memfunptr" has already been defined
C:ProgrammingMicrosoft Visual Studio2017CommunityVCToolsMSVC14.14.26428includetype_traits(139): error: class template "std::_Is_memfunptr" has already been defined
C:ProgrammingMicrosoft Visual Studio2017CommunityVCToolsMSVC14.14.26428includetype_traits(139): error: class template "std::_Is_memfunptr" has already been defined
C:ProgrammingMicrosoft Visual Studio2017CommunityVCToolsMSVC14.14.26428includetype_traits(139): error: class template "std::_Is_memfunptr" has already been defined
C:ProgrammingMicrosoft Visual Studio2017CommunityVCToolsMSVC14.14.26428includetype_traits(139): error: class template "std::_Is_memfunptr" has already been defined
C:ProgrammingMicrosoft Visual Studio2017CommunityVCToolsMSVC14.14.26428includetype_traits(139): error: class template "std::_Is_memfunptr" has already been defined
C:ProgrammingMicrosoft Visual Studio2017CommunityVCToolsMSVC14.14.26428includetype_traits(139): error: class template "std::_Is_memfunptr" has already been defined
C:ProgrammingMicrosoft Visual Studio2017CommunityVCToolsMSVC14.14.26428includetype_traits(139): error: class template "std::_Is_memfunptr" has already been defined
C:ProgrammingMicrosoft Visual Studio2017CommunityVCToolsMSVC14.14.26428includetype_traits(139): error: class template "std::_Is_memfunptr" has already been defined
C:ProgrammingMicrosoft Visual Studio2017CommunityVCToolsMSVC14.14.26428includetype_traits(139): error: class template "std::_Is_memfunptr" has already been defined
C:ProgrammingMicrosoft Visual Studio2017CommunityVCToolsMSVC14.14.26428includetype_traits(139): error: class template "std::_Is_memfunptr" has already been defined
C:ProgrammingMicrosoft Visual Studio2017CommunityVCToolsMSVC14.14.26428includetype_traits(139): error: class template "std::_Is_memfunptr" has already been defined
C:ProgrammingMicrosoft Visual Studio2017CommunityVCToolsMSVC14.14.26428includetype_traits(139): error: class template "std::_Is_memfunptr" has already been defined
C:ProgrammingMicrosoft Visual Studio2017CommunityVCToolsMSVC14.14.26428includetype_traits(139): error: class template "std::_Is_memfunptr" has already been defined
C:ProgrammingMicrosoft Visual Studio2017CommunityVCToolsMSVC14.14.26428includetype_traits(139): error: class template "std::_Is_memfunptr" has already been defined
C:ProgrammingMicrosoft Visual Studio2017CommunityVCToolsMSVC14.14.26428includetype_traits(139): error: class template "std::_Is_memfunptr" has already been defined
C:ProgrammingMicrosoft Visual Studio2017CommunityVCToolsMSVC14.14.26428includetype_traits(139): error: class template "std::_Is_memfunptr" has already been defined
C:ProgrammingMicrosoft Visual Studio2017CommunityVCToolsMSVC14.14.26428includetype_traits(139): error: class template "std::_Is_memfunptr" has already been defined
C:ProgrammingMicrosoft Visual Studio2017CommunityVCToolsMSVC14.14.26428includetype_traits(139): error: class template "std::_Is_memfunptr" has already been defined
C:ProgrammingMicrosoft Visual Studio2017CommunityVCToolsMSVC14.14.26428includetype_traits(139): error: class template "std::_Is_memfunptr" has already been defined
C:ProgrammingMicrosoft Visual Studio2017CommunityVCToolsMSVC14.14.26428includetype_traits(1824): error: class template "std::result_of" has already been defined
C:ProgrammingMicrosoft Visual Studio2017CommunityVCToolsMSVC14.14.26428includetype_traits(1824): error: class template "std::result_of" has already been defined
我一直在寻找解决方案。似乎其他有类似问题的人在他们包含的标头方面遇到了问题,但我的示例代码是从互联网上下载的,上传它的人没有任何问题,这让我对程序的哪个部分有问题感到困惑。
PS:我不知道我的cuda是否正确安装。详: 我无法在我的窗户上安装 cuda,安装一直告诉我安装失败。然后我在帖子 #19 的这个链接中找到了一个解决方案:https://devtalk.nvidia.com/default/topic/1035535/cuda-setup-and-installation/cuda-9-2-does-not-work-with-visual-studio-2017-15-7-1/2 它似乎工作正常,但我不知道这是否是问题所在。
我在Visual Studio 2019和CUDA v10.1中遇到了同样的问题,但是重新安装没有区别。最初我安装了不支持的Visual Studio 2012,所以我更新了版本,然后我开始看到模板类重定义错误,如此处所述 - 我使用的解决方案是将c1.exe/c1.dll的环境变量从(x86(更改为(x64(目录,我的所有错误都消失了。
是: D:\Program Files (x86(\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.22.27905\bin\Hostx64\x86
现在: D:\Program Files (x86(\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.22.27905\bin\Hostx64\x64
我在Nvidia CUDA论坛上发布了相同的帖子: 链接在这里
我使用帖子中的方法重新安装了多次,但仍然遇到相同的"类模板"问题。
然后我也使用相同的方法重新安装了 CUDA 9.1 和 VS2017 版本 15.6.7,它终于可以工作了。
我遇到的其他问题也在帖子中。
- 编译C++时未定义的引用
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- 在没有定义返回类型的函数中返回布尔值,并将结果保存在无错误的char编译中-为什么
- 编译时的 CImg 库返回对"__imp_SetDIBitsToDevice"的未定义引用
- 未定义的引用 .. 使用 OpenCV 编译 C++ 代码时,从命令行
- 标准是否严格定义了该程序应该如何编译?
- 如何摆脱为条件编译定义预处理器宏的需要?
- C++ 中的编译错误:未定义对"主"的引用 collect2:错误:ld 返回 1 个退出状态
- 在编译它时显示未定义的引用
- 使用宏编译时使用用户定义的数学函数,或者仅使用 c++ 中标准数学库中的函数
- 快捷方式在C 中编写自定义编译命令时
- C++静态枚举类成员的"多重定义"编译错误
- 有没有办法自定义编译错误/警告消息
- C++自定义编译时检查
- 通过宏定义编译标志(C++11 和优化)
- 无法使用类属性代码定义编译 c++
- 定义编译时常数的最佳方式
- 构造自定义编译库的更好方法
- 访问未定义的子类型时出现自定义编译错误消息
- 为什么易失性静态成员初始化会生成重新定义编译错误