純粋なC関数(main.cにある)内からCUDA C関数foo()
(gpu.cuにある)を呼び出す必要があります。これに対する私の試みを以下に示します。main()
main.c(呼び出し元):
#include "gpu.h" int main(); int main() { foo(); }
gpu.h(
foo()
宣言):<---ここで問題extern void foo();
gpu.cu(
foo()
定義):#include "gpu.h" extern "C" void foo() { ... }
エラーが発生します:
gpu.cu(2): error: linkage specification is incompatible with previous "foo" gpu.h(1): here
ただし、ヘッダーファイルを使用しない場合、以下は機能します。
main.c(呼び出し元):
void foo(); int main(); int main() { foo(); }
gpu.cu(
foo()
宣言と定義):extern "C" void foo(); extern "C" void foo() { ... }
もちろん、純粋なCコードとCUDA cコードの両方で単一のヘッダーファイルを使用することをお勧めします。ヘッダーファイルで使用する正しい構文は何ですか(extern "C"
C ++のものであっても必要ですか)。.cuh拡張子が必要ですか?
NVCCのみを使用してコンパイルおよびリンクしています(つまり、pure-CコードとCUDA-Cコードの両方)。
どうもありがとう。