NVCCによって生成されたオブジェクトファイルにリンクしようとしています。ここに非常に単純な「ライブラリ」があります。
//foo.cu:
void foo() {
}
そして、「ライブラリ」を使用するファイル:
//main.cu:
extern void foo();
int main(){
foo();
}
この単純なセットアップでは、ファイル内で関数を直接宣言することにより、インクルードファイルの必要性を回避していることに注意してください。ここで私がこれを構築しようとしたコマンド:
nvcc -c foo.cu -arch=sm_20
nvcc main.cu foo.o -arch=sm_20
これがNVCCで機能しないのはなぜですか?2番目のコマンドは、大量の次のものを生成します。
warning: null character(s) ignored
error: unrecognized token
別のCUDAインストール(4.0)を使用して別のマシンで試してみました。同じ奇妙なコンパイラ/リンカの出力。
extern "C"
また、C++の名前マングリングの代わりに使用してみました。同じ動作。さらに、C名のマングリングは、実際のアプリケーションではオプションではありません。