LNK2001:无法解析的外部符号threadIdx

时间:2020-02-11 16:10:48

标签: c++ cuda visual-studio-2019

我正在使用C ++ / Cuda并在“ MortalityTable.obj”中遇到编译错误“未解决的外部符号threadIdx”。

我创建了一个新的C ++ Cuda Runtime项目,然后编译并运行良好。 然后添加一个类MortalityTable.cu.h,而没有任何Cuda代码,只是常规C ++。编译并运行良好。

当我尝试添加Cuda内核时,错误开始(如果我注释掉,一切都很好)。我在MortalityTable.cu中有这些标题:

#include "cuda_runtime.h"
#include "device_launch_parameters.h"

这是我在同一文件中的内核

__global__
void DevPLE(double* devple, double* devQxt, int maxAge, int years) {
    int i = threadIdx.x;
    double surv = 0, ple = 0;
    for (int age = 0; age < maxAge; age++) {
        surv = surv * (1.0f - devQxt[age * years + i]);
        ple += surv;
    }
    devple[i] = ple + 0.5;
}

有什么想法可以让我编译并运行它吗? 当您创建新的Cuda Runtime Project时,kernel.cu中仍然有示例代码,它具有相同的标题并且可以正常工作。因此看来项目设置还可以,但是由于某种原因不适用于MortalityTable.cu ...

1 个答案:

答案 0 :(得分:1)

.cu文件用nvcc编译,.c .cpp用cl编译。

在cuda项目中,添加一个c ++文件(cpp),然后以.cu扩展名重命名,VS也不会更改编译器。

如果您编辑项目文件project.vcxproj,则可能需要检查.cu文件是否包含在CudaCompile标记中:

  <ItemGroup>
    <CudaCompile Include="cudacode.cu" />
  </ItemGroup>
  <ItemGroup>
    <ClCompile Include="code.cpp" />
  </ItemGroup>