我在Visual Studio 2013 x64上运行CUDA 6.5。
我有一个名为MyLib的VC ++静态库项目,该项目与MyClient x64控制台可执行项目链接。我为这两个项目添加了CUDA 6.5构建定制。另外,我转到配置属性 - > 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链接。我现在得到两个编译错误:
其次,链接时我得到了未解决的外部符号错误 MyClient与MyLib。这是日志输出:
------ Build build:Project: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 \助手\&#34 ;.不支持给定路径的格式。
2> ------ Build build:Project: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个未解析的外部
我尝试了发布和调试模式,但是我得到了同样的错误。
答案 0 :(得分:4)
我只是在重现解决错误的步骤:
[更新] :我最近找到了一个更好的解决方案 MSB3191:无法创建目录不支持给定路径的格式。。此修复工作无需将cu文件移动到VS项目文件夹。为此,打开文件" 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。现在打开文件:&#34; C:\ Program Files(x86)\ MSBuild \ Microsoft.Cpp \ v4.0 \ V120 \ BuildCustomizations \ CUDA 6.5.props&#34; 。此props文件定义目标文件中使用的属性的值。现在在此道具文件中搜索单词 DepsOutputDir 。只有XML部分定义并引用此关键字:
<!-- Miscellaneous -->
<DepsOutputFile>%(Filename)%(Extension).deps</DepsOutputFile>
<DepsOutputDir>$(IntDir)%(RelativeDir)</DepsOutputDir>
<DepsOutputPath>%(DepsOutputDir)%(DepsOutputFile)</DepsOutputPath>
现在,要最终解决MSB3191问题,只需从xml部分删除变量%(RelativeDir)并保存props文件(这需要管理权限)
要解决错误: LNK2001:未解析的外部符号,请按照此post
中的链接器设置部分进行操作LI>