2011-02-17 47 views
0

我編我的正常cpp文件到.O,和我的CUDA .CU文件對象.COCUDA:創建與G ++連接器和CUDA目標文件

我想這些聯繫起來,所以我可以打電話從CUDA東西我正常的C++文件

這裏是讓運行我的鏈接器命令:

g++ -I ../readers/ -I../writers -I../common/ -I /home/dcole/software/xerces-c-3.1.1/src -I /home/dcole/NVIDIA_GPU_Computing_SDK/C/common/inc/ -I /usr/local/cuda/include -O3 -fPIC -fopenmp -DFIX_PAULI -DFIX_YAMA -DUSING_CUDA -o YamaguchiGPU YamaguchiMain.o YamaguchiDecomp.o cuYamaguchi.co -L/usr/lib64/ ../../lib/IDT.a ../../lib/Linux/libxerces-c.a ../../lib/Linux/libfftw3f.a -lcurl -lidn -ldl -lssl -lm -lpthread -lcuda -L/usr/local/cuda/lib64/libcudart.so 

所以我definitly鏈接CUDA和cudart了,但我得到這個:

cuYamaguchi.co: In function `__sti____cudaRegisterAll_46_tmpxft_00003190_00000000_4_cuYamaguchi_cpp1_ii_init_gpu()': 
tmpxft_00003190_00000000-1_cuYamaguchi.cudafe1.cpp:(.text+0x1b4): undefined reference to `__cudaRegisterFatBinary' 
tmpxft_00003190_00000000-1_cuYamaguchi.cudafe1.cpp:(.text+0x20f): undefined reference to `__cudaRegisterFunction' 

回答

0

我在連接器中使用絕對搜索路徑到_libcudart.so_。我將-L更改爲僅指向該文件夾,然後添加-libcudart,以便在該文件夾中搜索該文件夾。

1

Cuda文件鏈接沒有問題,但它看起來像你可能忘記定義一些必要的功能(如cudaRegisterFatBinary)。

+0

所以,這些函數是cuda API的一部分。我的源文件.cu文件包含cuda.h和cuda_runtime.h – Derek

1

升級到gcc 4.7.0或更高版本應該修復這個可怕的鏈接器問題。