我在 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 和其他地方看到的所有类似问题的提及都是未能执行上面显示的单独编译步骤;我认为情况并非如此。