VS2008没有编译cuda

时间:2011-03-01 05:31:34

标签: visual-studio-2008 cuda

简而言之,当我尝试在IDE中编译VS2008项目时,它会失败,但是当我在命令提示符下使用相同的命令行时,它会编译。有人可以帮忙吗?

详细

VS2008Cuda工具包3.2一起使用。还安装了VS2010。 在开始此过程之前,请执行以下操作:steps

  1. 添加了一个自定义规则文件,该文件位于: C:\Program Files (x86)\NVIDIA GPU Computing Toolkit\CUDA\v3.2\extras\visual_studio_integration\rules
  2. 然后将C:\Program Files (x86)\NVIDIA GPU Computing Toolkit\CUDA\v3.2\lib\x64添加到项目属性linker->general中的其他库目录,cudart.libcuda.lib添加其他依赖项。
  3. 如果我遗失了什么,请告诉我。

    cmd提示符下的 set命令输出为:

    CUDA_BIN_PATH=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v3.2\\bin
    CUDA_INC_PATH=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v3.2\\include
    CUDA_LIB_PATH=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v3.2\\lib\x64
    CUDA_PATH=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v3.2\
    CUDA_PATH_V3_2=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v3.2\
    

    糟糕,忘记了错误消息

    1>t.cu.obj : error LNK2019: unresolved external symbol ___cudaUnregisterFatBinary@4 referenced in function "void __cdecl __cudaUnregisterBinaryUtil(void)" (?__cudaUnregisterBinaryUtil@@YAXXZ)
    1>t.cu.obj : error LNK2019: unresolved external symbol _cudaLaunch@4 referenced in function "enum cudaError __cdecl cudaLaunch<char>(char *)" (??$cudaLaunch@D@@YA?AW4cudaError@@PAD@Z)
    1>t.cu.obj : error LNK2019: unresolved external symbol _cudaSetupArgument@12 referenced in function "void __cdecl __device_stub__Z12compute_sum4P6float4S0_S0_i(struct float4 *,struct float4 *,struct float4 *,int)" (?__device_stub__Z12compute_sum4P6float4S0_S0_i@@YAXPAUfloat4@@00H@Z)
    1>t.cu.obj : error LNK2019: unresolved external symbol ___cudaRegisterFunction@40 referenced in function "void __cdecl __sti____cudaRegisterAll_47_tmpxft_00000ea8_00000000_8_t_compute_10_cpp1_ii_65ce9b46(void)" (?__sti____cudaRegisterAll_47_tmpxft_00000ea8_00000000_8_t_compute_10_cpp1_ii_65ce9b46@@YAXXZ)
    1>t.cu.obj : error LNK2019: unresolved external symbol ___cudaRegisterFatBinary@4 referenced in function "void __cdecl __sti____cudaRegisterAll_47_tmpxft_00000ea8_00000000_8_t_compute_10_cpp1_ii_65ce9b46(void)" (?__sti____cudaRegisterAll_47_tmpxft_00000ea8_00000000_8_t_compute_10_cpp1_ii_65ce9b46@@YAXXZ)
    1>t.cu.obj : error LNK2019: unresolved external symbol _cudaEventDestroy@4 referenced in function _main
    1>t.cu.obj : error LNK2019: unresolved external symbol _cudaEventElapsedTime@12 referenced in function _main
    1>t.cu.obj : error LNK2019: unresolved external symbol _cudaEventSynchronize@4 referenced in function _main
    1>t.cu.obj : error LNK2019: unresolved external symbol _cudaConfigureCall@32 referenced in function _main
    1>t.cu.obj : error LNK2019: unresolved external symbol _cudaEventRecord@8 referenced in function _main
    1>t.cu.obj : error LNK2019: unresolved external symbol _cudaThreadSynchronize@0 referenced in function _main
    1>t.cu.obj : error LNK2019: unresolved external symbol _cudaEventCreate@4 referenced in function _main
    1>t.cu.obj : error LNK2019: unresolved external symbol _cudaMemcpy@16 referenced in function _main
    1>t.cu.obj : error LNK2019: unresolved external symbol _cudaMalloc@8 referenced in function _main
    1>D:\projects\cup1\Debug\cup1.exe : fatal error LNK1120: 14 unresolved externals
    

    这是命令行

    C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v3.2\\bin\nvcc.exe"    -gencode=arch=compute_10,code=\"sm_10,compute_10\" -gencode=arch=compute_20,code=\"sm_20,compute_20\"  --machine 32 -ccbin "C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin"    -Xcompiler "/EHsc /W3 /nologo /O2 /Zi   /MT  "  -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v3.2\\include" -maxrregcount=32  --compile -o "Debug/t.cu.obj" t.cu 
    

3 个答案:

答案 0 :(得分:3)

nvcc不仅是一个编译器,还可以用于链接。

但是,在VS2008中工作时,链接阶段由VS执行。您必须告诉它包含其他cuda库文件。

在项目属性集中:

  • 配置属性 - &gt;链接器 - &gt;一般。设置:“其他库目录”以包含CUDA lib目录。值$(CUDA_LIB_PATH)就足够了,因为这个环境变量指向正确的方向

  • 配置属性 - &gt;链接器 - &gt;输入。将“附加依赖项”设置为“cudart.lib”

答案 1 :(得分:3)

您正在使用nvcc编译32位(--machine 32),但您链接的cuda库是64位([..]\lib\x64)。

答案 2 :(得分:0)

确保两件事:

  1. 您已在其他输入中添加 cudart.lib

  2. 在VC ++目录中设置 cudart.lib cudartxx_xx_x.dll 的路径。还要将cuda dll的路径添加到系统的环境变量中。

  3. 以下是分步指南:Run CUDA on Visual Studio 2008