我在Ubuntu 16.04上使用CUDA 7.5 SDK,通过nvidia-cuda-toolkit
包安装。我正在尝试使用cuFFT的回调函数编译一个简单的测试程序;该示例的源代码是available at GitHub。为什么我会在这个libcufft_static例子中得到“未定义引用__cudaRegisterLinkedBinary_60 _....`”错误?
Following the instructions for compiling with the callback feature,我编译源为可重定位的装置代码和链接对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 RC和CentOS7的麻烦。 Ubuntu 16.04不是CUDA 7.5官方支持的发行版,所以我怀疑你的CUDA安装确实已经中断。它看起来像你的CUDA安装分布在不寻常的地方,如'/ usr/lib' –
@RobertCrovella:感谢您的信息。我会尝试删除Ubuntu CUDA工具包包,并从NVidia的二进制安装程序安装,以查看是否有帮助。 –
您最安全的选择是切换到受支持的配置。 Ubuntu 16.04上的CUDA 8.0RC是受支持的配置。 CUDA 7.5(不管你如何安装它)不是。 –