2012-04-25 218 views
1

我有一个包含函数void A()的文件A.cu。我有它调用CUDA功能A(另一个文件test_A.c),也有函数声明为从C调用cuda函数

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' 

我缺少什么?

回答

5

的问题可能是C++的名字改编。 CUDA代码是用C++编译器编译的,而不是C编译器。如果转储A.o的内容,则应该找到一个名称类似于_Z1Av的符号,而不是像C编译器所期望的那样代码为A

为了克服这一点,你可以用下面的声明你的A.cu文件中:

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

这将告诉C++编译器编译代码时用C公约,并适当命名的功能将被写入C编译器和链接器可以理解的目标文件A.o