为什么我在下面的示例程序中遇到以下链接器错误?
test_cyl_bessel_i0f.o: In function `main':
tmpxft_00007f3f_00000000-4_test_cyl_bessel_i0f.cudafe1.cpp:(.text+0x26): undefined reference to `cyl_bessel_i0f'
collect2: error: ld returned 1 exit status
我正在使用以下命令编译和链接代码:
nvcc -I/usr/local/cuda/include -c test_cyl_bessel_i0f.cu
nvcc -L/usr/local/cuda/lib64 -o test_cyl_bessel_i0f test_cyl_bessel_i0f.o -lcudart
示例程序是
#include <stdio.h>
#include <math_functions.h>
int main(void)
{
float a;
a = cyl_bessel_i0f(0.5f);
printf("%f\n", a);
return 0;
}
我正在使用CUDA 7.5。
答案 0 :(得分:1)
正如您现在discovered,这些CUDA数学库函数没有主机实现(即使文档和头文件中存在细微的提示),这也无法解决。
答案 1 :(得分:0)
如上所述,此问题是文档错误。尽管CUDA文档(例如[1])显示了使用__host__
指令定义的cyl_bessel_i0f(和朋友),但这些函数的主机版本在CUDA Math库中不可用。 NVIDIA已经承认了这个问题,我已要求他们更新CUDA文档。我正在为其他人发布这个答案,以防他们遇到同样的问题。
[1] http://docs.nvidia.com/cuda/cuda-math-api/group__CUDA__MATH__SINGLE.html#group__CUDA__MATH__SINGLE