2016-03-30 2 views
4

Ich habe versucht, OpenCV 3.1 mit CMake (die GUI-Version) zu bauen, um Cuda zu aktivieren. Ich habe Cuda Version 7.5 64-Bit installiert und CMake fand automatisch den richtigen Pfad zum Cuda Toolkit. Ich stellte sicher, dass der Wert WITH_CUDA auf ON gesetzt war, und drückte auf configure. Folgendes habe ich bezüglich Cuda bekommen:OpenCV wird nicht mit CUDA gebaut, obwohl WITH_CUDA = ON in CMake

CUDA detected: 7.5 
CUDA NVCC target flags: -gencode;arch=compute_20,code=sm_20;-gencode;arch=compute_20,code=sm_21;-gencode;arch=compute_30,code=sm_30;-gencode;arch=compute_35,code=sm_35;-gencode;arch=compute_30,code=compute_30 

... 

Extra dependencies:   comctl32 gdi32 ole32 setupapi ws2_32 vfw32 cudart nppc nppi npps cufft -LC:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v7.5/lib/x64 

... 

Other third-party libraries: 
Use IPP:      9.0.1 [9.0.1] 
    at:      C:/OpenCV-3.1.0/opencv/sources/3rdparty/ippicv/unpack/ippicv_win 
Use IPP Async:    NO 
Use Eigen:     NO 
Use Cuda:     YES (ver 7.5) 
Use OpenCL:     YES 
Use custom HAL:    NO 

NVIDIA CUDA 
Use CUFFT:     YES 
Use CUBLAS:     NO 
USE NVCUVID:     NO 
NVIDIA GPU arch:    20 21 30 35 
NVIDIA PTX archs:   30 
Use fast math:    YES 

Dann erzeuge ich Visual Studio 12 2013 Win64.

Als nächstes öffne ich das neu generierte OpenCV.sln-Projekt in Visual Studio 2013 und baue das Projekt. Es ohne Fehler, aber 103 Warnungen wie folgt aus:

LINK : warning LNK4044: unrecognized option '/LC:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v7.5/lib/x64'; ignored 

OpenCV baut ganz gut und ich kann damit Programme bauen. Ich kann auch "opencv2/core/cuda.hpp" ohne Probleme hinzufügen. Allerdings, wenn ich versuchen, cuda :: GetDevice() i erhalten diesen Fehler zu verwenden:

OpenCV Error: No CUDA support (The library is compiled without CUDA support) in throw_no_cuda, file C:\builds\master_PackSlave-win64-vc12-shared\opencv\modules\core\include\opencv2/core/private.cuda.hpp, line 97 

Wenn ich die Informationen von cv :: getBuildInformation print() i erhalten:

Other third-party libraries: 
Use IPP:      9.0.1 [9.0.1] 
    at:      C:\builds\master_PackSlave-win64-vc12-shared\opencv\3rdparty/ippicv/unpack/ippicv_win 
Use IPP Async:    NO 
Use Eigen:     NO 
Use Cuda:     NO 
Use OpenCL:     YES 
Use custom HAL:    NO 

Es scheint Cuda ist irgendwo im Prozess deaktiviert, aber ich kann nicht herausfinden, warum. Ich habe versucht, mehrmals mit denselben Ergebnissen neu zu konfigurieren und zu erstellen. Würde mir etwas Hilfe dabei wünschen!

+0

verwenden Sie CMake Gui? Wenn nicht. versuchen Sie es, es wird Ihnen sagen, welche Verzeichnisse benötigt werden und ob sie gefunden/korrekt sind – Micka

+0

Ja, ich benutze die GUI-Version und alles Cuda verwandt (das ich in der Frage mindestens erwähnt) scheint richtig zu sein. – markustp

+1

Format der Option -LC:/Programme/NVIDIA GPU Computing Toolkit/CUDA/v7.5/lib/x64' sieht aus wie es von 'gcc' oder anderen Linux-Compiler (unter MinGW, wahrscheinlich) verwendet wird. Sind Sie sicher, dass die installierte CUDA mit dem 'cl'-Compiler kompiliert wurde, so dass sie mit VS-Projekt verknüpft werden kann? – Tsyvarev

Antwort

7

Das Problem ist CMake: Es erzeugt falsche Link-Optionen für Visual Studio.

LINK : warning LNK4044: unrecognized option '/LC:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v7.5/lib/x64'; ignored 

Es sollte "LIBPATH: C:" anstelle von "LC:".

das Problem zu beheben:

  • die Lösung mit CMake
  • Go
  • zum Build-Verzeichnis generiert
  • öffnen Sie einen IDE/Text-Editor, der eine globale Suche in diesem Verzeichnis zu tun ist in der Lage
  • Ersetzen Sie für jedes Auftreten von "-LC:" in einer Datei durch "-LIBPATH: C:".

========= EDIT =========

ich das Problem gefunden wird, ist es in CMakeLists.txt:

foreach(p ${CUDA_LIBS_PATH}) 
    set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} -L${p}) 
endforeach() 

Statt "$ {CMAKE_LIBRARY_PATH_FLAG}" zu verwenden, die automatisch -LIBPATH setzen, jemand setzen "-L" ...

Also, es zu beheben:

  • öffnen CMakeLists.txt
  • Ersetzen "-L" durch "$ {CMAKE_LIBRARY_PATH_FLAG}"

konfigurieren & die Lösung mit CMake generieren und kompilieren mit VS.

Hoffe, es wird helfen!

2

Sie können OpenCV mit Cuda erfolgreich kompilieren, nachdem Sie CMakeLists.txt wie Dubrzr manuell bearbeitet haben.

Auch Sie haben das gleiche Ergebnis, wenn Sie OpenCV direkt von Github herunterladen und kompilieren. Es ist bereits behoben.

Verwandte Themen