2012-04-25 10 views
1

私は関数A()を含むファイルA.cuを持っています。私はCUDA関数Aを(呼び出して別のファイルtest_A.cをしました)とCからの関数の呼び出し

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の内容をダンプすると、Aではなく、_Z1Avという名前のシンボルが見つかるはずです。

これを克服するために、あなたはあなたのA.cuファイル内の次の宣言を使用することができます。

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

このコードをコンパイルするときにC規則を使用するC++コンパイラを教えてくれますし、適切という名前の関数が書き込まれますCコンパイラとリンカが理解できるオブジェクトファイルA.o

関連する問題