我正在使用 CUDA 5.0 开发 Visual Studio 2008。我使用 CUDA Runtime API 作为构建规则。
我正在尝试编译一个包含 main 函数和一个全局内核的 test.cu 文件。主函数和内核都包含我使用相同的 CUDA 环境编译的外部库函数调用,启用了可重定位设备代码标志,NVCC 编译类型为 -c。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 文件导致的问题,那么是否意味着我必须将所有内核放在一个 .cu 文件中才能解决?