2010-01-14 13 views
10

Creo una nuova app Win32 Console come progetto vuoto Sono in esecuzione Windows 7 64 bit con Visual Studio 2008 C++. Sto cercando di ottenere il codice di esempio dalla fine di questo articolo per creare: http://www.ddj.com/architect/207200659Simboli esterni non risolti nei principianti Programma CUDA

Aggiungo CUDA Build Rule v2.3.0 alle regole di compilazione personalizzate del progetto. E 'l'unica cosa con una casella di controllo nella lista file di regole disponibili

creo moveArrays.cu nel file di origine (cartella/filtro ???)

In quel file aggiungo il seguente codice:

// 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); 
} 

Quando costruisco ottengo questi errori:

 
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 ========== 

posso compilare ed eseguire i programmi di esempio CUDA che è venuto con l'SDK. So che mi manca qualcosa di semplice qui, ma che cos'è?

risposta

14

Suppongo che manchi di collegare alla libreria corretta. Assicurarsi di avere aggiunto la libreria CUDA in "Proprietà di configurazione-> Linker-> Input". Vedere this. Sono necessari

+3

Sei corretto. Ho dovuto aggiungere "$ (CUDA_LIB_PATH); ../../ common/lib" a Proprietà di configurazione-> Linker-> Generale-> Additional Libary Directories "cudart.lib" a Proprietà di configurazione-> Linker -> Input-> Dipendenze aggiuntive –

+1

Sono stato creato precedentemente il mio progetto quando volevo renderlo un programma CUDA e aggiunto un file '.cu'. Indipendentemente dal fatto che ho selezionato Cuda 5.5 in "Project -> Build Customization", la libreria corretta a cui si fa riferimento, 'cudart.lib' non può essere trovata in" Proprietà di configurazione-> Linker-> Input-> Ulteriori dipendenze ", ma' $ (CudaToolkitLibDir) 'è stato trovato in" Proprietà di configurazione-> Linker-> Generale-> Directory di libreria aggiuntive ". – DanielTuzes

4

due cose:

  1. Aggiungi percorso CUDA:
    Go: "Configurazione Proprietà-> Linker-> Generale-> Ulteriori Libary Directories" e aggiungere $(CudaToolkitLibDir) alla lista.

  2. Add libreria CUDA in tempo reale:
    Go: "Soluzione Proprietà-> Linker-> INPUT-> Dipendenze aggiuntive" e aggiungere cudart.lib alla lista.

Problemi correlati