0

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名のマングリングは、実際のアプリケーションではオプションではありません。

4

1 に答える 1

2

信じられないことに、2 番目の呼び出しで引数の順序を逆にすると、これが修正されます。

nvcc foo.o main.cu -arch=sm_20

(はぁ)

于 2012-02-04T14:22:26.840 に答える