web-dev-qa-db-ja.com

CMake:OpenCVのコンパイル時にCUDAライブラリが見つかりません

CMAKEを使用して、OpenCV 3.0.0をWindowsでCUDAサポート付きでコンパイルしています。 「構成」をクリックすると、次のようなエラーが発生します。

CMake Error: The following variables are used in this project, but they are set to NOTFOUND.
Please set them or make sure they are set and tested correctly in the CMake files:
CUDA_cufft_LIBRARY (ADVANCED)
    linked by target "opencv_hal" in directory E:/dev-lib/opencv3/sources/modules/hal
    ...
CUDA_nppc_LIBRARY (ADVANCED)
    ...
CUDA_nppi_LIBRARY (ADVANCED)
    ...
CUDA_npps_LIBRARY (ADVANCED)

エントリの「WITH_CUDA」と「WITH_CUFFT」を確認しました。 「WITH_CUBLAS」もチェックすると、上記の出力にCUDA_cublas_LIBRARYエラーがさらに1つ追加されます。

しかし、これらすべてのエラーメッセージの前に、

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

これは、CUDAがCMAKEによって検出できることを示しています。ただし、必要な4つのライブラリが見つかりません。

以前にCUDA 7.5をインストールしてVisual Studio 2012でコンパイルしました。 CUDAサンプルは完全に実行されます。したがって、私のCUDAライブラリは正しくインストールされているはずです。

これらの値を手動で設定する必要がある場合でも、どうすればよいですか?

私の仕様:Windows 7 x64、Visual Studio 2012、CMAKE 3.4.0、CUDA Toolkit 7.5

10
John Hany

コメントのドロップからのヒントのおかげで、私はこの問題を解決しました。この質問を締めくくるために、私は自分の質問に答えています。

「Win32またはx64」アーキテクチャの問題です。 NVIDIAはx_64用にcufftnvblasnppcnppinpps libsのみを提供するため、CMAKEがこれらを見つけることは当然不可能です。 Win32 OpenCVライブラリを構成するためのライブラリ。

私の解決策は、CMAKEのジェネレーターとしてVisual Studio 11ではなくVisual Studio 11 Win64を選択することでした。そのため、CMAKEは<CUDA_DIR>\lib\x64ではなく<CUDA_DIR>\lib\Win32からlibsを自動的にロードします。さらに、OpenGLなど、64ビットバージョンのOpenCVに必要な他のすべてのライブラリもロードする必要があります。また、x64アーキテクチャーでOpenCVをコンパイルする必要があります。今後作成するコードはすべて、x64でのみビルドおよびデバッグする必要があります。


中国語の資料を読むのに問題がない場合、私は上の完全なガイドに関する投稿に向けて link を提供させていただきますCUDAをサポートするVS2012でOpenCV 3.0を構築します。

22
John Hany

Linuxの場合、私は次の手順で解決しました:

(1)libフォルダーの.soファイルを確認します(例:cuda7-cudnn3/lib64)。

(2)Sudo ln -s libcublas.so.7.5.18 libcublas.soのようにシンボリックリンクを作成します

私の場合、CMakeLists.txtとMakefile.configに正しくリンクを設定しましたが、.soファイルがありませんでした。

0
Cloud Cho

それは本当にバージョンに関連しています!!! Cudaでコンパイルしたい場合、opencv2413をcmakeすると、makefileがより多くの機能をサポートするサードパーティのライブラリを見つけようとすることに気づくでしょう:

CUDA_TOOLKIT_ROOT_DIR C:/ Program Files/NVIDIA GPU Computing Toolkit/CUDA/v9.0

そのことから、CUDA v9.0をインストールしたことがわかっていますが、opencv_dep_CUDA_nppi_LIBRARYが見つからないというエラーが表示されるため、C:\ Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\lib\x64で探します。 nppi.libという名前のファイルを取得できなかったため、テストのために、空のファイルを作成してnppi.lib、私が推測したように、私は働いたが、実際には十分ではなかった。テストはopencvのコンパイルに役立ちません。さらに、CUDA v8があったことがわかりました。そして驚いたことに、私はC:\ Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\lib\x64にlibnppi.libを取得しました。環境パスを変更します

CUDA_TOOLKIT_ROOT_DIR C:/ Program Files/NVIDIA GPU Computing Toolkit/CUDA/v8.0その後、再構成しました。出来た!!

0
Chuckie Pan