Я на Ubuntu 16.04 с использованием CUDA 7.5 SDK, установленный через nvidia-cuda-toolkit
пакет. Я пытаюсь скомпилировать простую тестовую программу, используя функцию обратного вызова cuFFT; исходный код к примеру доступно на GitHub.
Следуя инструкциям по компиляции с функцией обратного вызова, Я собираю исходный код как перемещаемый код устройства и связываю libcufft_static.a
:
nvcc -ccbin g++ -dc -m64 -o cufft_callbacks.o -c cufft_callbacks.cu
nvcc -ccbin g++ -m64 -o cufft_callbacks cufft_callbacks.o -lcufft_static -lculibos
В приведенной выше последовательности последняя команда завершается ошибкой с рядом ошибок, похожих на эту:
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcufft_static.a(set_callback.o): In function `__sti____cudaRegisterAll_47_tmpxft_00003a6a_00000000_7_set_callback_cpp1_ii_b7e0d86d()':
tmpxft_00003a6a_00000000-4_set_callback.cudafe1.cpp:(.text+0x6fd): undefined reference to `__cudaRegisterLinkedBinary_47_tmpxft_00003a6a_00000000_7_set_callback_cpp1_ii_b7e0d86d'
Он жалуется на множество пропущенных символов, все начинаются с __cudaRegisterLinkedBinary_
, Я не думаю, что я делаю что-то не так, поскольку та же последовательность команд работает на компьютере с CentOS 7, который у меня под рукой.
Возможно ли, что мой SDK неправильно настроен? Все упоминания о похожих проблемах, которые я видел в SO и других местах, были неспособны выполнить отдельные шаги компиляции, показанные выше; Я не думаю, что это так.
Мне удалось решить эту проблему путем обновления до CUDA 8.0 RC, как @RobertCrovella предложила в комментарии выше. Должна быть проблема с пакетом 7.5 Ubuntu.
Других решений пока нет …