初学者CUDA程序中未解析的外部符号

问题描述 投票:11回答:3

我创建一个新的Win32 Console App作为一个空项目我正在使用Visual Studio 2008 C ++运行Windows 7 64bit。我正在尝试从本文底部获取示例代码以进行构建:http://www.ddj.com/architect/207200659

我将CUDA构建规则v2.3.0添加到项目的自定义构建规则中。这是可用规则文件列表中唯一带有复选框的内容

我在源文件中创建moveArrays.cu(文件夹/过滤器???)

在该文件中,添加以下代码:

// moveArrays.cu
//
// demonstrates CUDA interface to data allocation on device (GPU)
// and data movement between host (CPU) and device.

#include <stdio.h>
#include <assert.h>
#include <cuda.h>
int main(void)
{
   float *a_h, *b_h;     // pointers to host memory
   float *a_d, *b_d;     // pointers to device memory
   int N = 14;
   int i;
   // allocate arrays on host
   a_h = (float *)malloc(sizeof(float)*N);
   b_h = (float *)malloc(sizeof(float)*N);
   // allocate arrays on device
   cudaMalloc((void **) &a_d, sizeof(float)*N);
   cudaMalloc((void **) &b_d, sizeof(float)*N);
   // initialize host data
   for (i=0; i<N; i++) {
      a_h[i] = 10.f+i;
      b_h[i] = 0.f;
   }
   // send data from host to device: a_h to a_d 
   cudaMemcpy(a_d, a_h, sizeof(float)*N, cudaMemcpyHostToDevice);
   // copy data within device: a_d to b_d
   cudaMemcpy(b_d, a_d, sizeof(float)*N, cudaMemcpyDeviceToDevice);
   // retrieve data from device: b_d to b_h
   cudaMemcpy(b_h, b_d, sizeof(float)*N, cudaMemcpyDeviceToHost);
   // check result
   for (i=0; i<N; i++)
      assert(a_h[i] == b_h[i]);
   // cleanup
   free(a_h); free(b_h); 
   cudaFree(a_d); cudaFree(b_d);
}

构建时出现这些错误:

1> ------开始构建:项目:CUDASandbox,配置:Debug x64 ------1>正在链接...1> moveArrays.cu.obj:错误LNK2019:未解析的外部符号cudaFree在函数main中引用1> moveArrays.cu.obj:错误LNK2019:函数main中引用的未解析的外部符号cudaMemcpy1> moveArrays.cu.obj:错误LNK2019:函数main中引用的未解析的外部符号cudaMalloc1> moveArrays.cu.obj:错误LNK2019:函数__cudaUnregisterBinaryUtil中引用的未解析的外部符号__cudaUnregisterFatBinary1> moveArrays.cu.obj:错误LNK2019:函数__sti____cudaRegisterAll_45_tmpxft_00001264_00000000_6_moveArrays_cpp1_ii_main中引用的未解析的外部符号__cudaRegisterFatBinary1> D:\ Stuff \ Programming \ Visual Studio 2008 \ Projects \ CUDASandbox \ x64 \ Debug \ CUDASandbox.exe:致命错误LNK1120:5个未解决的外部组件1>构建日志保存在“文件:// d:\ Stuff \ Programming \ Visual Studio 2008 \ Projects \ CUDASandbox \ CUDASandbox \ x64 \ Debug \ BuildLog.htm”1> CUDASandbox-6个错误,0个警告==========构建:0成功,1失败,0最新,跳过0 ==========

我可以编译并运行SDK随附的示例CUDA程序。我知道我在这里缺少一些简单的东西,但这是什么?

c++ visual-studio-2008 cuda
3个回答
16
投票

我想您缺少链接到正确的库的信息。确保在“配置属性->链接器->输入”下添加了CUDA库。请参阅this


9
投票

需要两件事:

  1. 添加CUDA路径:转到:“配置属性->链接器->常规->其他库目录”,然后将$(CudaToolkitLibDir)添加到列表中。

  2. 添加CUDA运行时库:转到:“解决方案属性->链接器->输入->其他依赖项”,然后将cudart.lib添加到列表中。


0
投票

在Visual Studio 2019中:

仔细检查CUDA_PATH环境变量的可用性。

配置属性-> VC ++目录->包含目录->添加$(CUDA_PATH)\ include

配置属性-> VC ++目录->库目录->添加$(CUDA_PATH)\ lib \ x64

配置属性->链接器->输入->其他依赖关系->在$(CUDA_PATH)\ lib \ x64下添加.lib文件,并忽略现有的.lib文件。

© www.soinside.com 2019 - 2024. All rights reserved.