Ich habe Probleme, selbst die einfachsten Code für CUDA 8 und Visual Studio 2015 Update 3.Wie funktioniert CUDA 8 in Visual Studio 2015 Update 3 mit CMake?
CUDASample.cuh
class CUDASample {
public:
CUDASample();
~CUDASample();
};
CUDASample.cu
#include "CUDASample.cuh"
CUDASample::CUDASample() {
}
CUDASample::~CUDASample(){
}
Ich erhalte Kompilation zu kompilieren Fehler wie
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt\corecrt_malloc.h(63): error : unknown attribute "guard"
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt\corecrt_malloc.h(64): error : unknown attribute "guard"
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt\corecrt_malloc.h(76): error : unknown attribute "guard"
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt\corecrt_malloc.h(98): error : unknown attribute "guard"
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt\corecrt_malloc.h(118): error : unknown attribute "guard"
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt\corecrt_malloc.h(125): error : unknown attribute "guard"
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt\corecrt_malloc.h(126): error : unknown attribute "guard"
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt\corecrt_malloc.h(137): error : unknown attribute "guard"
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt\corecrt_malloc.h(144): error : unknown attribute "guard"
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt\corecrt_malloc.h(161): error : unknown attribute "guard"
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt\corecrt_malloc.h(170): error : unknown attribute "guard"
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt\corecrt_malloc.h(171): error : unknown attribute "guard"
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt\corecrt_malloc.h(180): error : unknown attribute "guard"
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt\corecrt_malloc.h(188): error : unknown attribute "guard"
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt\corecrt_malloc.h(189): error : unknown attribute "guard"
ich bin ziemlich su Es ist ein CUDA-Problem, denn wenn ich die Quelldateierweiterung auf "cpp" und die Header-Erweiterung auf "h" ändere, funktioniert alles wie gewohnt. Wie kann ich das lösen?
EDIT:
Die Kommandozeile in Eigenschaften gezeigt -> Linker -> Command Line ist
/OUT:"C:\Users\David\Desktop\sample\build\bin\Release\cudasample.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 Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\lib\x64\cudart_static.lib" /IMPLIB:"C:/Users/David/Desktop/sample/build/lib/Release/cudasample.lib" /DLL /MACHINE:X64 /INCREMENTAL:NO /PGD:"C:\Users\David\Desktop\sample\build\bin\Release\cudasample.pgd" /SUBSYSTEM:CONSOLE /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /ManifestFile:"cudasample.dir\Release\cudasample.dll.intermediate.manifest" /ERRORREPORT:PROMPT /NOLOGO /TLBID:1
EDIT:
Wie Robert erwähnt, da ich erfolgreich die CUDA-Proben zu kompilieren bin in der Lage möglicherweise hängt das Problem mit der Cmake-Konfiguration zusammen. Unten sind die CMakeLists, die ich verwendet habe, die für mich beim Kompilieren auf Visual Studio 2013 + CUDA 7.5 funktionieren.
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})
Was könnte falsch sein?
Wird dies bei der endgültigen Version von CUDA 8.0 oder dem Release-Kandidaten beobachtet? Wie lautet die Versionsnummer von 'nvcc'? Kannst du deiner Frage den genauen Aufruf von 'nvcc' hinzufügen, der zu diesen Fehlermeldungen geführt hat? – njuffa
@njuffa Dies ist die endgültige Version von CUDA 8, 'nvcc --version' ergibt V8.0.44. Der sln wird von cmake erzeugt, mit den Standard 'find_package (CUDA REQUIRED)' und 'cuda_add_library' – user3667089
Viele Leute benutzen CMAKE nicht, oder benutzen vielleicht eine andere Version als Ihre. Indem Sie die eigentliche 'nvcc'-Befehlszeile veröffentlichen, erhöhen Sie die Wahrscheinlichkeit, dass andere das Problem, das Sie sehen, reproduzieren und diagnostizieren können. – njuffa