4

Cuda 5.0、VS2010を使用

このプロジェクトはVS2012で正常にコンパイルおよびリンクされますが、VS2012はNsightデバッグをサポートしていないため、VS2010でも開発しています。VS2010プロジェクトファイルがありますが、同じソースコードファイル(.h、.cpp、.cu、.cuh)を使用しています。

VS2010ビルドはすべてを正常にコンパイルしますが、リンクするとエラーが未解決の外部で報告されます。

 Generating Code...
1>videoFuncUnThread.obj : error LNK2019: unresolved external symbol _runKernel referenced in function "void __cdecl videoFuncUnThread(int,bool,unsigned int * const)" (?videoFuncUnThread@@YAXH_NQAI@Z)
1>D:\StrApp\Viper1B_10\Viper1B_10\Debug\Viper1B_10.exe : fatal error LNK1120: 1 unresolved externals
1>
1>Build FAILED.
1>

欠落しているシンボルrunKernelは、デバイス側モジュール(PTXファイルに常駐)を呼び出すホスト側モジュールです。

runKernelのすべてのオカレンスを検索すると、次の3行が表示されます。

filter.cu(127):                     extern "C" CUresult runKernel (int numFrames,     cudaStream_t stream, bool firstBatch, int* searchLimit) { ... } // module code 
videofuncunthread.cpp(28): extern "C" CUresult runKernel(int numFrames, cudaStream_t stream,  bool firstBatch,  int* search);  // 
videofuncunthread.cpp(137): CUresult resultKernel = runKernel( NinBatch, gStream, firstBatch, (int *)searchLimit);

「filter.cu」はコンパイルされるので、呼び出し行(137)がプロトタイプ宣言(28)と一致することを意味します。また、filter.cuの定義がプロトタイプと同じであることがわかります。

最後に、VS2010のcuda 5.0サンプルからの例を正常にコンパイル、リンク、および実行したことに注意してください。両方のプロジェクトで同じCudaビルドルールを使用していること、およびプロジェクトとCudaサンプルプロジェクト間のプロジェクトプロパティが同じであることを確認しました。

あなたが提供できる洞察や提案は大歓迎です。

ありがとう

4

1 に答える 1

5

VS2010 が CUDA コードをビルドしてリンクしていることは確かですか? VS2010 のセットアップ、特に CUDA ビルドのカスタマイズの有効化に関する注意事項については、この回答を参照してください。.cuまた、ビルドのカスタマイズの前にファイルを追加した場合は、ファイルのタイプを に設定する必要があることに注意してください(.cuファイルをCUDA C/C++右クリックし、Propertiesを選択し、 Item Typeを設定します)。

簡単なチェックの 1 つは、.cuファイルに変更を加えて、再コンパイルされていることを確認することです。

于 2013-01-15T10:07:17.127 に答える