2010-01-14 8 views
10

Creo una nueva aplicación de consola Win32 como un proyecto vacío Estoy ejecutando Windows 7 de 64 bits con Visual Studio 2008 C++. Estoy intentando obtener el código de muestra de la parte inferior de este artículo para compilar: http://www.ddj.com/architect/207200659Símbolos externos no resueltos en principiantes Programa CUDA

Agrego CUDA Build Rule v2.3.0 a las reglas de compilación personalizadas del proyecto. Es la única cosa con una casilla de verificación en la lista de archivos de reglas disponibles

creo moveArrays.cu en los archivos de origen (carpeta/filtro ???)

En ese archivo agrego el siguiente código:

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

Cuando construyo me sale estos errores:

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

que puede compilar y ejecutar los programas de ejemplo CUDA que vienen con el SDK. Sé que me falta algo simple aquí, pero ¿qué es?

Respuesta

14

Supongo que falta el enlace a la biblioteca correcta. Asegúrese de tener la biblioteca CUDA agregada en "Propiedades de configuración-> Enlazador-> Entrada". Consulte this. Se necesitan

+3

Usted está correcto. Tuve que agregar "$ (CUDA_LIB_PATH); ../../ common/lib" a Propiedades de Configuración-> Enlazador-> General-> Directorios Adicionales de Librería y "cudart.lib" a Propiedades de configuración-> Enlazador -> Entrada -> Dependencias Adicionales –

+1

Anteriormente había creado mi proyecto cuando quería convertirlo en un programa CUDA y agregué un archivo '.cu'. Independientemente del hecho de que seleccioné Cuda 5.5 en "Proyecto -> Personalización de compilación", la biblioteca correcta a la que se refiere, 'cudart.lib' no se puede encontrar en" Propiedades de configuración-> Enlazador-> Entrada-> Dependencias adicionales ", pero' $ (CudaToolkitLibDir) 'se encontró en" Propiedades de configuración-> Enlazador-> General-> Directorios de biblioteca adicionales ". – DanielTuzes

4

dos cosas:

  1. Añadir ruta CUDA:
    Go: "Configuración Properties-> Linker-> General-> adicional Libary directorios" y añaden $(CudaToolkitLibDir) a la lista.

  2. Agregar biblioteca CUDA en tiempo real:
    Go: "Solución Properties-> Linker-> input-> Dependencias adicionales" y añadir cudart.lib a la lista.

Cuestiones relacionadas