CUDA: создание объекта с помощью компоновщика G ++ и объектных файлов cuda - PullRequest
0 голосов
/ 17 февраля 2011

Я скомпилировал мои обычные файлы cpp в .o, а мои файлы cuda .cu - в .co

Я хочу связать их, чтобы я мог вызывать материал cuda из моего обычного файла C ++

Вот моя команда компоновщика, которая запускает 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 ]

1 голос
/ 26 июня 2012

Обновление до gcc 4.7.0 или выше должно исправить эту ужасную проблему с линкером.

1 голос
/ 17 февраля 2011

Файл Cuda связывается без проблем, но похоже, что вы, возможно, забыли определить некоторую необходимую функцию (например, cudaRegisterFatBinary).

0 голосов
/ 17 февраля 2011

Я использовал абсолютный путь поиска в компоновщике до _libcudart.so_. Я изменил -L так, чтобы он указывал только на папку, затем добавил -libcudart, чтобы он выполнял поиск в папке для этой библиотеки.

...