2010-01-14 46 views
10

我創建了一個新的Win32控制檯應用程序作爲一個空項目 我使用Visual Studio 2008 C++運行Windows 7 64位。我試圖從本文的底部獲取示例代碼來構建:http://www.ddj.com/architect/207200659初學者無法解析的外部符號CUDA程序

我將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>------ Build started: Project: CUDASandbox, Configuration: Debug x64 ------ 
1>Linking... 
1>moveArrays.cu.obj : error LNK2019: unresolved external symbol cudaFree referenced in function main 
1>moveArrays.cu.obj : error LNK2019: unresolved external symbol cudaMemcpy referenced in function main 
1>moveArrays.cu.obj : error LNK2019: unresolved external symbol cudaMalloc referenced in function main 
1>moveArrays.cu.obj : error LNK2019: unresolved external symbol __cudaUnregisterFatBinary referenced in function __cudaUnregisterBinaryUtil 
1>moveArrays.cu.obj : error LNK2019: unresolved external symbol __cudaRegisterFatBinary referenced in function __sti____cudaRegisterAll_45_tmpxft_00001264_00000000_6_moveArrays_cpp1_ii_main 
1>D:\Stuff\Programming\Visual Studio 2008\Projects\CUDASandbox\x64\Debug\CUDASandbox.exe : fatal error LNK1120: 5 unresolved externals 
1>Build log was saved at "file://d:\Stuff\Programming\Visual Studio 2008\Projects\CUDASandbox\CUDASandbox\x64\Debug\BuildLog.htm" 
1>CUDASandbox - 6 error(s), 0 warning(s) 
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ========== 

我可以編譯和運行與SDK附帶的示例CUDA程序。我知道我在這裏錯過了一些簡單的東西,但它是什麼?

回答

14

我想你錯過了鏈接到正確的庫。 確保您在「配置屬性 - >鏈接器 - >輸入」下添加了CUDA庫。 請參閱this。需要

+3

你是對的。我必須將「$(CUDA_LIB_PATH); ../../ common/lib」添加到Configuration Properties-> Linker-> General-> Additional Libary Directories 和 「cudart.lib」 - > Input-> Additional Dependencies – 2010-01-14 03:27:51

+1

我之前創建過我的項目時,我想讓它成爲一個CUDA程序並添加一個'.cu'文件。無論我在「Project - > Build Customization」中選擇Cuda 5.5,在「Configuration Properties-> Linker-> Input-> Additional Dependencies」中都找不到「cudart.lib」引用的正確庫,而是'在「Configuration Properties-> Linker-> General-> Additional Library Directories」找到$(CudaToolkitLibDir)'。 – DanielTuzes 2014-01-20 12:42:03

4

兩件事情:

  1. 加入CUDA路徑:
    轉到: 「配置屬性 - >連接器 - >常規 - >附加Libary目錄」,並添加$(CudaToolkitLibDir)到列表中。

  2. 添加CUDA實時庫:
    轉到:「解決方案屬性 - >連接器 - >輸入 - >附加依賴」,並添加cudart.lib到列表中。