如何使用CMake使CUDA 8在Visual Studio 2015更新3上工作
How to make CUDA 8 work on Visual Studio 2015 update 3 with CMake?
我甚至在为CUDA 8和Visual Studio 2015更新3编译最简单的代码时也遇到了麻烦。
CUDASample.cuh
class CUDASample {
public:
CUDASample();
~CUDASample();
};
CUDASample.cu
#include "CUDASample.cuh"
CUDASample::CUDASample() {
}
CUDASample::~CUDASample(){
}
我得到编译错误,如
1>C:Program Files (x86)Windows Kits10Include10.0.10240.0ucrtcorecrt_malloc.h(63): error : unknown attribute "guard"
1>C:Program Files (x86)Windows Kits10Include10.0.10240.0ucrtcorecrt_malloc.h(64): error : unknown attribute "guard"
1>C:Program Files (x86)Windows Kits10Include10.0.10240.0ucrtcorecrt_malloc.h(76): error : unknown attribute "guard"
1>C:Program Files (x86)Windows Kits10Include10.0.10240.0ucrtcorecrt_malloc.h(98): error : unknown attribute "guard"
1>C:Program Files (x86)Windows Kits10Include10.0.10240.0ucrtcorecrt_malloc.h(118): error : unknown attribute "guard"
1>C:Program Files (x86)Windows Kits10Include10.0.10240.0ucrtcorecrt_malloc.h(125): error : unknown attribute "guard"
1>C:Program Files (x86)Windows Kits10Include10.0.10240.0ucrtcorecrt_malloc.h(126): error : unknown attribute "guard"
1>C:Program Files (x86)Windows Kits10Include10.0.10240.0ucrtcorecrt_malloc.h(137): error : unknown attribute "guard"
1>C:Program Files (x86)Windows Kits10Include10.0.10240.0ucrtcorecrt_malloc.h(144): error : unknown attribute "guard"
1>C:Program Files (x86)Windows Kits10Include10.0.10240.0ucrtcorecrt_malloc.h(161): error : unknown attribute "guard"
1>C:Program Files (x86)Windows Kits10Include10.0.10240.0ucrtcorecrt_malloc.h(170): error : unknown attribute "guard"
1>C:Program Files (x86)Windows Kits10Include10.0.10240.0ucrtcorecrt_malloc.h(171): error : unknown attribute "guard"
1>C:Program Files (x86)Windows Kits10Include10.0.10240.0ucrtcorecrt_malloc.h(180): error : unknown attribute "guard"
1>C:Program Files (x86)Windows Kits10Include10.0.10240.0ucrtcorecrt_malloc.h(188): error : unknown attribute "guard"
1>C:Program Files (x86)Windows Kits10Include10.0.10240.0ucrtcorecrt_malloc.h(189): error : unknown attribute "guard"
我很确定这是一个CUDA问题,因为如果我将源文件扩展名改为"cpp"和头扩展名改为"h",一切照常工作。我怎么解决这个问题?
编辑:properties -> link -> Command Line中显示的命令行是
/OUT:"C:UsersDavidDesktopsamplebuildbinReleasecudasample.dll" /MANIFEST /NXCOMPAT /PDB:"C:/Users/David/Desktop/sample/build/bin/Release/cudasample.pdb" /DYNAMICBASE "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" "shell32.lib" "ole32.lib" "oleaut32.lib" "uuid.lib" "comdlg32.lib" "advapi32.lib" "C:Program FilesNVIDIA GPU Computing ToolkitCUDAv8.0libx64cudart_static.lib" /IMPLIB:"C:/Users/David/Desktop/sample/build/lib/Release/cudasample.lib" /DLL /MACHINE:X64 /INCREMENTAL:NO /PGD:"C:UsersDavidDesktopsamplebuildbinReleasecudasample.pgd" /SUBSYSTEM:CONSOLE /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /ManifestFile:"cudasample.dirReleasecudasample.dll.intermediate.manifest" /ERRORREPORT:PROMPT /NOLOGO /TLBID:1
编辑:正如Robert提到的,由于我能够成功编译cuda样本,问题可能与cmake配置有关。以下是我在Visual Studio 2013 + CUDA 7.5上编译时使用的CMakeLists。
project(cudasample)
set(PROJECT_SRCS
${PROJECT_SOURCE_DIR}/src/CUDASample.cu
)
set(PROJECT_INCS
${PROJECT_SOURCE_DIR}/include/CUDASample.cuh
)
include_directories(${PROJECT_SOURCE_DIR}/include)
find_package( CUDA REQUIRED )
list(APPEND CUDA_NVCC_FLAGS "-gencode arch=compute_52,code=sm_52;")
list(APPEND CUDA_NVCC_FLAGS "-gencode arch=compute_50,code=sm_50;")
list(APPEND CUDA_NVCC_FLAGS "-gencode arch=compute_35,code=sm_35;")
list(APPEND CUDA_NVCC_FLAGS "-gencode arch=compute_30,code=sm_30;")
if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX)
set(CUDA_PROPAGATE_HOST_FLAGS OFF)
list(APPEND CUDA_NVCC_FLAGS "-std=c++11;")
endif()
cuda_add_library(${PROJECT_NAME} SHARED ${PROJECT_SRCS} ${PROJECT_INCS})
怎么了?
我至少设法让它工作。根本原因是sdl编译器标志在我的头CMakeLists.txt
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /sdl")
如果我在项目cmakelists。txt中加入这一行
string(REGEX REPLACE "/sdl" "/sdl-" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
,它将成功编译。
然而,我仍然不清楚为什么sdl编译器标志会导致NVCC在CUDA 8和Visual Studio 2015 Update 3的组合中失败。希望有人能想出更好的答案。
相关文章:
- Visual Studio 2015:Extern "C" 和 "export" 关键字
- Qt Visual Studio 2015 加载项编译问题
- 包含在 <WinSock2> Visual Studio 2015 中时出现错误
- 在 Windows 10 上的 Visual Studio 2015 中使用 _open 和 _setmode
- 如何在不进入 Visual Studio 2015 中的外部库的情况下单步执行我的代码 (F11)
- c++ Visual Studio 2015 快捷方式,用于从选择代码中生成功能
- Visual Studio 2015资源视图和资源编译器使用不同的方法在项目目录中查找图标文件.如何修复
- Visual Studio 2015 中的调试速度很慢 -- 无法关闭页面堆?
- 在 C++ 中使用带有正则表达式的 G++ 和 Visual Studio 14 2015 编译器时会产生不同的结果
- 安装 SFML 后 Visual Studio 2015 中出现错误
- WinDBG适用于从Visual Studio 2015保存的转储,但不适用于任务管理器。显示异常代码"not found"
- 在Visual Studio 2017上使用VC++ 2015工具链时缺少ATL标头
- Visual Studio 2015 安装问题
- 迁移到 Visual Studio 2015 时 ATL 不起作用
- 使用 Visual Studio Shell (隔离) 2015 编译
- Qt5.9.1 和 Visual Studio 2015 添加了 Qt WebEngine 模块
- 外部 "C" Visual Studio 2015 中的显式类型错误,DLL 测试代码
- CMake 和 Visual Studio 2015 - C 编译器 cl.exe 无法编译简单的测试程序
- 如何在 Linux 中运行 Visual Studio 2015 托管 c++ 测试函数?
- Visual Studio 2015:在远程编译(在Raspberry上)和本地编译(在Windows上)之间切换