从C调用cuda函数

时间:2012-04-25 06:52:07

标签: c cuda

我有一个包含函数void A()的文件A.cu。我有另一个文件test_A.c,它调用cuda函数A()并且函数声明为

extern void A();

现在我按如下方式编译和链接它们

nvcc -c -o A.o A.cu 
gcc -o test_A test_A.c A.o /opt/cuda-4.0/cuda/lib64/libcudart.so

我得到的错误就像

undefined reference to `A'

我错过了什么?

1 个答案:

答案 0 :(得分:5)

问题可能是C ++名称错误。 CUDA代码使用C ++编译器编译,而不是使用C编译器编译。如果您转储A.o的内容,您应该找到一个名为_Z1Av的符号,而不是C编译器所期望的A

要解决此问题,您可以在A.cu文件中使用以下声明:

extern "C" void A(void)
{
    .......
}

这将告诉C ++编译器在编译代码时使用C约定,并且适当命名的函数将写入C编译器和链接器可以理解的目标文件A.o