1
我想將CUDA代碼與我現有的C++應用程序集成。正如在一些網絡端的指示,我需要有一個「file.cu」,我有一個包裝功能,它在GPU上執行內存分配並啓動內核。我遵循這個建議,但是,我現在無法編譯代碼。CUDA與C/C++編譯失敗
file.cu
#include <cuda.h>
#include <stdio.h>
void preComputeCorrelation_gpu(int * d)
{
//I shall write the kernel later once I am confirmed that CUDA code works
cudaDeviceProp prop;
cudaGetDeviceProperties(&prop, 0);
printf("name = %s\n", prop.name);
}
的main.cpp
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <cuda.h>
#define __CUDA_SUPPORT__
#ifdef __CUDA_SUPPORT__
// Defination to be found in "cudaWrap.cu"
extern void preComputeCorrelation_gpu(int * d);
#endif
int main()
{
//code to read d from the file and other initialization
int * d;
.
.
#ifdef __CUDA_SUPPORT__
fprintf(stderr, "GPU Computation starts");
// Defination to be found in "cudaWrap.cu"
preComputeCorrelation_gpu(d);
#else
fprintf(stderr, "CPU Computation starts");
preComputeCorrelation(d);
#endif
.
.
//more code
return 0 ;
}
現在,我把下面的命令來編譯代碼
$ nvcc -c cudaWrap.cu <br/>
$ g++ -I /usr/local/cuda-5.0/include -L /usr/local/cuda-5.0/lib -o GA_omp GA_dev_omp.cpp main_omp.cpp data_stats.cpp cudaWrap.o
編譯失敗,我得到後以下信息第二個命令。儘管第一條命令起作用。
cudaWrap.o: In function `preComputeCorrelation_gpu(DataSet*)':
tmpxft_00001061_00000000-3_cudaWrap.cudafe1.cpp:(.text+0x2f): undefined reference to `cudaGetDeviceProperties'
cudaWrap.o: In function `__cudaUnregisterBinaryUtil()':
tmpxft_00001061_00000000-3_cudaWrap.cudafe1.cpp:(.text+0x6b): undefined reference to `__cudaUnregisterFatBinary'
cudaWrap.o: In function `__sti____cudaRegisterAll_43_tmpxft_00001061_00000000_6_cudaWrap_cpp1_ii_f8a043c5()':
tmpxft_00001061_00000000-3_cudaWrap.cudafe1.cpp:(.text+0x8c): undefined reference to `__cudaRegisterFatBinary'
collect2: ld returned 1 exit status
我該如何解決這個問題呢?
忘記鏈接libcudart.so。在g ++命令的末尾加上-lcudart,它應該編譯。 – hubs
完美...現在它的作品...謝謝! – mkuse
@mkuse:如果您將解決方案添加爲答案,將會有所幫助。在幾天之內,您將能夠接受它,並且將從未答覆的列表中解決問題。 – talonmies