2010-01-14 3 views
10

Je crée une nouvelle application console Win32 en tant que projet vide J'utilise Windows 7 64 bits avec Visual Studio 2008 C++. J'essaie d'obtenir l'exemple de code à partir du bas de cet article pour construire: http://www.ddj.com/architect/207200659Symboles externes non résolus dans les programmes débutants CUDA

J'ajoute CUDA Build Rule v2.3.0 aux règles de construction personnalisées du projet. Il est la seule chose avec une case à cocher dans la liste des fichiers de règles disponibles

Je crée moveArrays.cu dans les fichiers source (dossier/filtre ???)

Dans ce fichier ajouter le code suivant:

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

Quand je construis je reçois ces erreurs:

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

je peux compiler et exécuter les exemples de programmes CUDA fourni avec le SDK. Je sais qu'il me manque quelque chose de simple ici, mais qu'est-ce que c'est?

Répondre

14

Je suppose qu'il vous manque pour créer un lien vers la bibliothèque correcte. Assurez-vous que la bibliothèque CUDA est ajoutée dans "Configuration Properties-> Linker-> Input". Référez this.

+3

Vous avez raison. Je devais ajouter "$ (CUDA_LIB_PATH); ../../ common/lib" à Configuration Properties-> Linker-> Général-> Annuaires Libary supplémentaires et "cudart.lib" aux propriétés de configuration-> Linker -> Input-> Dépendances supplémentaires –

+1

J'avais déjà été créé mon projet quand je voulais en faire un programme CUDA et ajouté un fichier '.cu'. Indépendamment du fait que j'ai sélectionné Cuda 5.5 dans "Project -> Build Customization", la bibliothèque correcte à laquelle vous faites référence, 'cudart.lib', ne peut pas être trouvée dans" Configuration Properties-> Linker-> Input-> Additional Dependencies ", mais' $ (CudaToolkitLibDir) 'a été trouvé dans" Configuration Properties-> Linker-> General-> Additional Library Directories ". – DanielTuzes

4

Deux choses sont nécessaires:

  1. Ajouter un chemin cuda:
    Go: "Configuration Propriétés-> Linker-> Général-> supplémentaires Libary Directories" et ajouter à la liste $(CudaToolkitLibDir).

  2. bibliothèque en temps réel Ajouter cuda:
    Go: "Solution Propriétés-> Linker-> Input-> Dépendances supplémentaires" et ajoutez cudart.lib à la liste.

Questions connexes