技术背景
在上一篇文章中介绍过如何实现本地MindSpore的CUDA算子,那么在算子编译和使用的过程中可能会出现一些小问题,这里介绍的是编译成功为so动态链接库之后,在python中调用,提示找不到xxx函数/字符的报错。这里使用的编译指令为:
$ nvcc --shared -Xcompiler -fPIC -o xxx.so xxx.cu
编译后完整报错如下:
python3: symbol lookup error: xxx.so: undefined symbol: cufftExecR2C
原因分析
我们在这个cu文件中调用了cufft的cufftExecR2C
函数,但是在编译阶段未使用相关fft的编译配置,导致了编译后的so动态链接库无法识别到cufft库中的函数。
解决方案
在编译时加上-lcufft
选项,问题解决。
$ nvcc --shared -Xcompiler -fPIC -lcufft -o xxx.so xxx.cu