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サンプルプロジェクト間のプロジェクトプロパティが同じであることを確認しました。
あなたが提供できる洞察や提案は大歓迎です。
ありがとう