CUDA 5.0 を使用して、Visual Studio 2008 で作業しています。CUDA ランタイム API をビルド ルールとして使用しています。メイン関数と 1 つのグローバルカーネル
を含む単一の test.cu ファイルをコンパイルしようとしています。メイン関数とカーネルの両方に、リロケータブル デバイス コード フラグを有効にし、NVCC コンパイル タイプを -c にして、同じ CUDA 環境を使用してコンパイルした外部ライブラリ関数呼び出しが含まれています。test.cu は正常にコンパイルされますが、リンク中に次のエラーが出力されます。
1>Linking...
1>test.cu.obj : error LNK2019: unresolved external symbol ___cudaRegisterLinkedBinary_43_tmpxft_00001888_00000000_8_test_cpp1_ii_98e63e3a referenced in function "void __cdecl __sti____cudaRegisterAll_43_tmpxft_00001888_00000000_8_test_cpp1_ii_98e63e3a(void)" (?__sti____cudaRegisterAll_43_tmpxft_00001888_00000000_8_test_cpp1_ii_98e63e3a@@YAXXZ)
__cudaRegisterLinkedBinary を検索したところ、CUDA v5.0 では crt/host_rintime.h に定義されていることがわかりましたが、v4.2 ではそのようなものはありません。
crt/host_runtime.h:#define __REGISTERFUNCNAME_CORE(X) __cudaRegisterLinkedBinary##X
crt/host_runtime.h:#define ____cudaRegisterLinkedBinary(X)
v5.0で追加されたセパレートコンパイル機能が関係していると思われますが、よろしいでしょうか?
誰かがエラーを解決するのを手伝ってくれますか? .cu ファイルを個別にコンパイルしたために問題が発生した場合、それを解決するにはすべてのカーネルを 1 つの .cu ファイルに入れる必要があるということですか?