2016-03-30 46 views
4

Cakeを有効にするためにCMake(guiバージョン)を使ってOpenCV 3.1をビルドしようとしました。私はCudaバージョン7.5の64ビットをインストールしました.CMakeは自動的にCudaツールキットへの正しいパスを見つけました。私はWITH_CUDA値がONに設定されていることを確認し、設定を押しました。これは私がCudaに関して得たものです:CMakeのWITH_CUDA = ONでもOpenCVがビルドされない

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 

次に、Visual Studio 12 2013 Win64を使って生成します。

次は、新しく生成されたOpenCV.slnプロジェクトをVisual Studio 2013で開き、プロジェクトをビルドします。これは、エラーなしで完了しますが、このような103警告:

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

OpenCVのがうまく構築し、私はそれを使ってプログラムを構築することができます。私は "opencv2/core/cuda.hpp"も問題なく含めることができます。しかし、ときに私はCUDAを使用しよう:: getDevice()私はこのエラーを取得:私が得る

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 

私はCVからの情報を印刷:: getBuildInformation():

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 

それはクーダようですプロセスのどこかで無効になっていますが、理由を把握できません。私は同じ結果で数回再構成して再構築しようとしました。これについていくつかの助けが大好きです!

+0

CMake Guiをお使いですか?そうでない場合。それは試してみると、どのディレクトリが必要なのか、それらが見つかったのか正確であるのかを教えてくれます。 – Micka

+0

はい、私はguiのバージョンとすべてのcuda関連を使用しています。 – markustp

+1

オプション '-LC:/ Program Files/NVIDIA GPUコンピューティングツールキット/ CUDA/v7.5/lib/x64'のフォーマットはgccや他のLinuxコンパイラ(おそらくMinGWの下)で使われているようです。インストールされたCUDAは 'cl'コンパイラでコンパイルされているので、VSプロジェクトでリンクすることはできますか? – Tsyvarev

答えて

7

問題はCMake:Visual Studioの間違ったリンクオプションを生成します。

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

"LC:"ではなく "LIBPATH:C:"にする必要があります。

  • CMakeの
  • このディレクトリに をグローバルな検索を行うことができるである
  • ゴーオープン
  • ビルドディレクトリにIDE /テキストエディタを使用してソリューションを生成します。問題を解決するには

  • どのファイルでも "-LC:"が出現するたびに、 "-LIBPATH:C:"に置き換えてください。

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

私はそれがCMakeLists.txtであり、問​​題を発見:

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

代わりに、自動的に-libpathを置く "$ {CMAKE_LIBRARY_PATH_FLAGを}" を使用し、誰かが

だからそれを修正するために... "-L" を置く:

  • オープンCMakeLists.txt
  • 構成&はCMakeの持つ溶液を生成し、VS.でコンパイル

"$ {CMAKE_LIBRARY_PATH_FLAG}" で "-L" を置き換え

希望すると助かります!

2

Dubrzrが言うようにCMakeLists.txtを手作業で編集した後に、OpenCVをCudaでコンパイルすることができます。

また、OpenCVをgithubから直接ダウンロードしてコンパイルすると同じ結果になります。すでに修正されています。

関連する問題