我将正常的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'
答案 0 :(得分:1)
Cuda文件链接没有问题,但看起来您可能忘记定义一些必要的功能(如cudaRegisterFatBinary)。
答案 1 :(得分:1)
升级到gcc 4.7.0或更高版本应解决这个可怕的链接器问题。
答案 2 :(得分:0)
我在链接器中使用绝对搜索路径_libcudart.so_
。我将-L
更改为仅指向文件夹,然后添加-libcudart
,以便在该文件夹中搜索该库。