2012-04-25 127 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