【发布时间】:2015-02-27 11:21:06
【问题描述】:
我在 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 链接。我现在得到两个编译错误:
- 编译 MyLib 时出现第一个错误,提示无法创建目录
-
其次,链接时出现未解决的外部符号错误 MyClient 与 MyLib。这是日志输出:
------ 构建开始:项目:MyLib,配置:Release 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,配置:Release x64 ------ 2>MyLib.lib(MyCUDACode.obj) : error LNK2001: unresolved external symbol cudaGetDeviceCount
2>MyLib.lib(MyCUDACode.obj) : error LNK2001: unresolved external symbol cudaDeviceCanAccessPeer
2>MyLib.lib(MyCUDACode.obj) : 错误 LNK2001: 无法解析的外部符号 cudaGetDeviceProperties
2>MyLib.lib(MyCUDACode.obj) : error LNK2001: unresolved external symbol cudaSetDevice
2>MyLib.lib(MyCUDACode.obj) : error LNK2001: unresolved external symbol cudaDeviceDisablePeerAccess
2>MyLib.lib(MyCUDACode.obj) : error LNK2001: unresolved external symbol cudaDeviceReset
2>MyLib.lib(MyCUDACode.obj) : error LNK2001: unresolved external symbol cudaDeviceEnablePeerAccess
2>C:...\visual studio 2013\Projects\Prj\x64\Release\MyClient.exe : 致命错误 LNK1120: 7 unresolved externals
我已经尝试了发布和调试模式,但我得到了同样的错误。
【问题讨论】:
-
您是否查看了错误消息的第一行。您的项目设置中某处的路径格式错误。
-
我可以看到:""x64\Release\D:\github\src\helpers\""。这个特定的文件夹“D:\github\src\helpers\”有 MyCUDACode.h 和 MyCUDACode.cpp 文件。但我不确定为什么 VS 使用这条路径
-
当我检查 BuildCustomizations\CUDA 6.5.targets(412,9) 文件时,我看到以下内容:
-
@talonmies:我从头开始创建了两个示例项目(控制台和静态库)项目,并向其中添加了 CUDA 6.5 自定义。现在我没有得到 MSB3191:无法创建目录”,但我仍然得到未解决的外部符号错误
-
好的,我找到了解决外部符号错误的方法。只需按照以下文本:链接器配置属性->链接器->常规->附加库目录的设置:$(CudaToolkitLibDir)$(CUDA_LIB_PATH)$(CUDA_PATH)\lib\$(PlatformName)配置属性->链接器->输入- >其他依赖 cuda.lib;cudart.lib;和其他库..
标签: c++ visual-studio-2013 cuda linker-errors