C++ CUDA 6.5:错误MSB3191无法创建目录和LNK2001未解析的外部符号

C++ CUDA 6.5:错误MSB3191无法创建目录和LNK2001未解析的外部符号,c++,visual-studio-2013,cuda,linker-errors,C++,Visual Studio 2013,Cuda,Linker Errors,我正在Visual Studio 2013 x64上运行CUDA 6.5 我有一个名为MyLib的VC++静态库项目,它与MyClient x64控制台可执行项目链接。我在两个项目中都添加了CUDA 6.5构建定制。此外,我转到Configuration Properties->CUDA C/C++并将这两个项目的“目标机器平台”设置为64位,因为我想为x64平台编译它们 我将MyCUDACode.cpp和MyCUDACode.h文件添加到MyLib项目中,并将它们的项类型标记为CUDA C/C

我正在Visual Studio 2013 x64上运行CUDA 6.5

我有一个名为MyLib的VC++静态库项目,它与MyClient x64控制台可执行项目链接。我在两个项目中都添加了CUDA 6.5构建定制。此外,我转到Configuration Properties->CUDA C/C++并将这两个项目的“目标机器平台”设置为64位,因为我想为x64平台编译它们

我将MyCUDACode.cpp和MyCUDACode.h文件添加到MyLib项目中,并将它们的项类型标记为CUDA C/C++而不是oc C/C++编译器。MyCUDACode.cpp有许多调用CUDA API函数的函数。此外,MyCUDACode.h引用cuda.h和cuda_runtime.h文件

MyClient与MyLib链接。现在我发现两个编译错误:

  • 编译MyLib时的第一个错误,表示无法创建目录
  • 第二,我在链接时遇到未解决的外部符号错误 MyLib的MyClient。以下是日志输出:

    ------已开始构建:项目:MyLib,配置:版本x64------ 1> C:\Program Files(x86)\MSBuild\Microsoft.Cpp\v4.0\V120\BuildCustomizations\CUDA 6.5.targets(412,9):错误MSB3191:无法创建目录“x64\Release\D:\github\src\helpers\”。不支持给定路径的格式

    2> ----构建已启动:项目:MyClient,配置:版本x64------ 2> MyLib.lib(MyCUDACode.obj):错误LNK2001:未解析的外部符号cudaGetDeviceCount

    2> MyLib.lib(MyCUDACode.obj):错误LNK2001:未解析的外部符号cudaDeviceCanAccessPeer

    2> MyLib.lib(MyCUDACode.obj):错误LNK2001:未解析的外部符号cudaGetDeviceProperties

    2> MyLib.lib(MyCUDACode.obj):错误LNK2001:未解析的外部符号cudaSetDevice

    2> MyLib.lib(MyCUDACode.obj):错误LNK2001:未解析的外部符号cudaDeviceDisablePeerAccess

    2> MyLib.lib(MyCUDACode.obj):错误LNK2001:未解析的外部符号cudaDeviceReset

    2> MyLib.lib(MyCUDACode.obj):错误LNK2001:未解析的外部符号cudaDeviceEnablePeerAccess

    2> C:…\visual studio 2013\Projects\Prj\x64\Release\MyClient.exe:致命错误LNK1120:7个未解析的外部


我已经尝试了发布和调试模式,但我得到了相同的错误

我只是重复了解决错误的步骤:

  • 若要解决此错误(临时解决方法):MSB3191:无法创建目录,不支持给定路径的格式。,只需将Cuda cu和cuh文件复制到Visual studio项目文件夹
  • [更新]:我最近找到了一个更好的解决方案,用于解决以下问题MSB3191:无法创建目录给定路径的格式不受支持。。此修复程序无需将cu文件移动到VS project文件夹即可工作。为此,请打开文件“C:\Program Files(x86)\MSBuild\Microsoft.Cpp\v4.0\V120\BuildCustomizations\CUDA 6.5.targets”,并移到有问题的行(本例中为412)。此行包含以下xml部分:

    <MakeDir
        Condition="'%(CudaCompile.ExcludedFromBuild)' != 'true'"
        Directories="%(CudaCompile.DepsOutputDir)" />
    
    
    
    如您所见,这是一种指令,它告诉构建系统为正在编译的cuda文件创建一个文件夹。用于文件夹名称的属性是CudaCompile.DepsOutputDir。现在打开文件:“C:\ProgramFiles(x86)\MSBuild\Microsoft.Cpp\v4.0\V120\BuildCustomizations\CUDA 6.5.props”。此道具文件定义目标文件中使用的属性值。现在在这个道具文件中搜索单词DepsOutputDir。只有定义和引用此关键字的XML部分是:

        <!-- Miscellaneous -->
        <DepsOutputFile>%(Filename)%(Extension).deps</DepsOutputFile>
        <DepsOutputDir>$(IntDir)%(RelativeDir)</DepsOutputDir>
        <DepsOutputPath>%(DepsOutputDir)%(DepsOutputFile)</DepsOutputPath> 
    
    
    %(文件名)%(扩展名).deps
    $(IntDir)%(相对数字)
    %(DepsOutputDir)%(DepsOutputFile)
    
    现在,要最终解决MSB3191问题,只需从上述xml部分中删除变量%(RelativeDir),并保存props文件(这需要管理权限)

  • 要解决此错误:LNK2001:未解析的外部符号,请按照本节中链接器的设置进行操作


我只是重复了解决错误的步骤:

  • 若要解决此错误(临时解决方法):MSB3191:无法创建目录,不支持给定路径的格式。,只需将Cuda cu和cuh文件复制到Visual studio项目文件夹
  • [更新]:我最近找到了一个更好的解决方案,用于解决以下问题MSB3191:无法创建目录给定路径的格式不受支持。。此修复程序无需将cu文件移动到VS project文件夹即可工作。为此,请打开文件“C:\Program Files(x86)\MSBuild\Microsoft.Cpp\v4.0\V120\BuildCustomizations\CUDA 6.5.targets”,并移到有问题的行(本例中为412)。此行包含以下xml部分:

    <MakeDir
        Condition="'%(CudaCompile.ExcludedFromBuild)' != 'true'"
        Directories="%(CudaCompile.DepsOutputDir)" />
    
    
    
    如您所见,这是一种指令,它告诉构建系统为正在编译的cuda文件创建一个文件夹。用于文件夹名称的属性是CudaCompile.DepsOutputDir。现在打开文件:“C:\ProgramFiles(x86)\MSBuild\Microsoft.Cpp\v4.0\V120\BuildCustomizations\CUDA 6.5.props”。此道具文件定义目标文件中使用的属性值。现在在这个道具文件中搜索单词DepsOutputDir。只有定义和引用此关键字的XML部分是:

        <!-- Miscellaneous -->
        <DepsOutputFile>%(Filename)%(Extension).deps</DepsOutputFile>
        <DepsOutputDir>$(IntDir)%(RelativeDir)</DepsOutputDir>
        <DepsOutputPath>%(DepsOutputDir)%(DepsOutputFile)</DepsOutputPath> 
    
    
    %(文件名)%(扩展名).deps
    $(IntDir)%(相对数字)
    %(DepsOutputDir)%(DepsOutputFile)
    
    现在,要最终解决MSB3191问题,只需从上述xml部分中删除变量%(RelativeDir),并保存props文件(这需要管理权限)

  • 要解决此错误:LNK2001:未解析的外部符号,请按照本节中链接器的设置进行操作


你看到第一个李了吗