CUDA:使用G ++链接器和cuda目标文件创建对象

时间:2011-02-17 17:01:27

标签: c++ linker g++ cuda

我将正常的cpp文件编译为.o,将我的cuda .cu文件编译为.co

我想链接这些,所以我可以从普通的C ++文件中调用cuda的东西

这是Make正在运行的链接器命令:

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 

所以我肯定会联系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'

3 个答案:

答案 0 :(得分:1)

Cuda文件链接没有问题,但看起来您可能忘记定义一些必要的功能(如cudaRegisterFatBinary)。

答案 1 :(得分:1)

升级到gcc 4.7.0或更高版本应解决这个可怕的链接器问题。

答案 2 :(得分:0)

我在链接器中使用绝对搜索路径_libcudart.so_。我将-L更改为仅指向文件夹,然后添加-libcudart,以便在该文件夹中搜索该库。