質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.53%

  • OpenCV

    1469questions

    OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

  • CUDA

    105questions

    CUDAは並列計算プラットフォームであり、Nvidia GPU(Graphics Processing Units)向けのプログラミングモデルです。CUDAは様々なプログラミング言語、ライブラリ、APIを通してNvidiaにインターフェイスを提供します。

  • CMake

    92questions

    CMakeはクロスプラットフォームで作動するオープンソースのビルドシステムです。コマンドライン又は組み込まれた開発環境で使うことができる元のmakefileとプロジェクトファイルを生成します。

OpenCV+CUDAをx86/x64両方向けにCMakeで自前ビルドする方法

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 11K+

jty4k

score 13

お世話になります。
OpenCVのCMakeビルドでまた詰まったことがありました。
ご教示頂きたく、宜しくお願いいたします。

前提・実現したいこと

下記環境でx86ビルドとx64ビルドを両方できるようにしたいと考えています。
OS       :Windows7 64bit 
CMake  :3.3.2 
OpenCV:3.0 
CUDA   :7.5
開発環境:Visual Studio Community 2013

(OpenCVのソースやCUDA(SDK)にはx86,x64の区別が特に無いようでした。)

x64ビルドができるようには問題なくできましたが、x86ビルドができません。
OpenCV単体であればx86/x64ビルド共に問題なくできましたが、「WITH_CUDA」にチェックをするとうまくいかないようです。

試したインストールの手順 その1

ます試したのは何も考えずにx86ビルド用なんだから、ということで32bitOS用のインストール方法を下記の手順で行いました。

1.OpenCVを公式ページからDLしてCドライブ直下へ保存
<http://opencv.org/>
2.CMake(cmake-gui.exe)でConfigure
Where is the sorce code -> C:/opencv/sources
Where to build the binaries -> C:/opencv/work
プルダウンリストから「Visual Studio 12 2013」を選択
ラジオボタンは「Use default native compilers」を選択
3.「Error in configuration process, project files may be invalid」のエラーダイアログ出現
(WITH_CUDAにチェックはついている)

ここでCMake-gui下部のメッセージ部には以下のような赤字のメッセージが大量に出ております。

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 C:/opencv/sources/modules/hal
    linked by target "opencv_cudev" in directory C:/opencv/sources/modules/cudev
    linked by target "opencv_test_cudev" in directory C:/opencv/sources/modules/cudev/test
    linked by target "opencv_perf_core" in directory C:/opencv/sources/modules/core
    linked by target "opencv_core" in directory C:/opencv/sources/modules/core
    linked by target "opencv_test_core" in directory C:/opencv/sources/modules/core
・・・(中略)・・・
    linked by target "opencv_traincascade" in directory C:/opencv/sources/apps/traincascade
    linked by target "opencv_createsamples" in directory C:/opencv/sources/apps/createsamples
    linked by target "opencv_annotation" in directory C:/opencv/sources/apps/annotation

Configuring incomplete, errors occurred!
See also "C:/opencv/work/CMakeFiles/CMakeOutput.log".
See also "C:/opencv/work/CMakeFiles/CMakeError.log".

パッと見た様子では記載内容については特に問題があるようには見えませんでしたが、書いてある通りCMakeError.logを確認したところ下記の内容のエラーが出ておりました。(エラー内容のみ抜粋)

Determining if the system is big endian passed with the following output:
Change Dir: C:/opencv/work/CMakeFiles/CMakeTmp

Run Build Command:"C:/Program Files (x86)/MSBuild/12.0/bin/MSBuild.exe" "cmTC_6a9cc.vcxproj" "/p:Configuration=Debug" "/p:VisualStudioVersion=12.0"
Microsoft (R) Build Engine バージョン 12.0.40629.0
[Microsoft .NET Framework、バージョン 4.0.30319.42000]
Copyright (C) Microsoft Corporation. All rights reserved.
・・・(中略)・・・
  CheckFunctionExists.obj : error LNK2019: 未解決の外部シンボル _fseeko が関数 _main で参照されました。 [C:\opencv\work\CMakeFiles\CMakeTmp\cmTC_6f842.vcxproj]
  C:\opencv\work\CMakeFiles\CMakeTmp\Debug\cmTC_6f842.exe : fatal error LNK1120: 1 件の未解決の外部参照 [C:\opencv\work\CMakeFiles\CMakeTmp\cmTC_6f842.vcxproj]
    0 個の警告
    2 エラー
経過時間 00:00:00.39
・・・(中略)・・・
  C:\opencv\work\CMakeFiles\CMakeTmp\CheckIncludeFile.c(1): fatal error C1083: include ファイルを開けません。'unistd.h':No such file or directory [C:\opencv\work\CMakeFiles\CMakeTmp\cmTC_dbc1c.vcxproj]
・・・(中略)・・・
C:\opencv\work\CMakeFiles\CheckTypeSize\OFF64_T.c(23): error C2065: 'off64_t' : 定義されていない識別子です。 [C:\opencv\work\CMakeFiles\CMakeTmp\cmTC_1c786.vcxproj]
・・・(中略)・・・
  CheckFunctionExists.obj : error LNK2019: 未解決の外部シンボル _jbg_newlen が関数 _main で参照されました。 [C:\opencv\work\CMakeFiles\CMakeTmp\cmTC_93073.vcxproj]
  C:\opencv\work\CMakeFiles\CMakeTmp\Debug\cmTC_93073.exe : fatal error LNK1120: 1 件の未解決の外部参照 [C:\opencv\work\CMakeFiles\CMakeTmp\cmTC_93073.vcxproj]
・・・(中略)・・・
  CheckFunctionExists.obj : error LNK2019: 未解決の外部シンボル _mmap が関数 _main で参照されました。 [C:\opencv\work\CMakeFiles\CMakeTmp\cmTC_3c324.vcxproj]
  C:\opencv\work\CMakeFiles\CMakeTmp\Debug\cmTC_3c324.exe : fatal error LNK1120: 1 件の未解決の外部参照 [C:\opencv\work\CMakeFiles\CMakeTmp\cmTC_3c324.vcxproj]
・・・(中略)・・・
  C:\opencv\work\CMakeFiles\CMakeTmp\CheckIncludeFile.c(1): fatal error C1083: include ファイルを開けません。'unistd.h':No such file or directory [C:\opencv\work\CMakeFiles\CMakeTmp\cmTC_74963.vcxproj]
    0 個の警告
    1 エラー
経過時間 00:00:00.22

・「unistd.h」というファイルは確かに書いてあるディレクトリにはありませんが、MATLAB関連のファイルらしく勝手に動かしてもよいのかわかっておりません。
・「off64_t」が定義されてないのは64bitOSなのに32bitOSと同じ手順でビルド仕様としたからかもしれませんが、「WITH_CUDA」にチェックをしなければエラーが出ないのは納得いきません。
・「_jbg_newlen」や「_mmap」が未解決になっているのは何かこちらでパスを指定しなければならないのかもしれませんが心当たりがありません。

エラー内容を見てもいまいち解決までのめどが立ちそうになかったため、次の方法を試しました。

試したインストールの手順 その2

64bitOSを使っているんだから、ということで今度は以下の手順を試しました。

1.OpenCVを公式ページからDLしてCドライブ直下へ保存
<http://opencv.org/>
2.CMake(cmake-gui.exe)でConfigure
Where is the sorce code -> C:/opencv/sources
Where to build the binaries -> C:/opencv/work
プルダウンリストから「Visual Studio 12 2013 Win64」を選択
ラジオボタンは「Use default native compilers」を選択
3.WITH_CUDAにチェックがついているのを確認して再度Configure
(ほかの赤くハイライトされたところはそのまま)
4.赤いハイライトがなくなったのを確認してGenerate
5.OpenCV.slnを開く
6.メニューバーの「ビルド→構成マネージャ」を開く
7.アクティブソリューションプラットフォームから「新規作成」を選ぶ
8.Win32を選んで(設定のコピー元はx64)OKを押した後、構成マネージャを閉じる
9.メニューバーの「ビルド→バッチビルド」を開く
10.「ALL_BUILD」と「INSTALL」のプロジェクトのうち、プラットフォームがWin32になっているものにチェックをつけてビルド開始

ところが残念なことにエラーが大量に出ました。

エラー        1        error LNK1104: ファイル '..\..\lib\Debug\opencv_hal300d.lib' を開くことができません。        C:\opencv\work\modules\cudev\LINK        opencv_cudev
エラー        433        error LNK1104: ファイル '..\..\lib\Debug\opencv_hal300d.lib' を開くことができません。        C:\opencv\work\modules\core\LINK        opencv_core
エラー        434        error MSB8013: このプロジェクトには、Debug|Win32 の構成とプラットフォームの組み合わせが含まれていません。        C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.Cpp.Platform.targets        61        5        IlmImf
エラー        435        error MSB8013: このプロジェクトには、Debug|Win32 の構成とプラットフォームの組み合わせが含まれていません。        C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.Cpp.Platform.targets        61        5        libjasper
エラー        436        error MSB8013: このプロジェクトには、Debug|Win32 の構成とプラットフォームの組み合わせが含まれていません。        C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.Cpp.Platform.targets        61        5        libjpeg
エラー        437        error MSB8013: このプロジェクトには、Debug|Win32 の構成とプラットフォームの組み合わせが含まれていません。        C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.Cpp.Platform.targets        61        5        libpng
・・・(中略)・・・
エラー        518        error MSB8013: このプロジェクトには、Debug|Win32 の構成とプラットフォームの組み合わせが含まれていません。        C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.Cpp.Platform.targets        61        5        opencv_test_cudaoptflow
エラー        519        error MSB8013: このプロジェクトには、Debug|Win32 の構成とプラットフォームの組み合わせが含まれていません。        C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.Cpp.Platform.targets        61        5        ALL_BUILD
エラー        520        error MSB8013: このプロジェクトには、Debug|Win32 の構成とプラットフォームの組み合わせが含まれていません。        C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.Cpp.Platform.targets        61        5

CMakeで「Visual Studio 12 2013 Win64」を指定したからうまくいかないのかも知れないとは思いましたが、確信が持てません。


上記の2つの方法を試しましたがうまくいきませんでした。
見当はずれなことをしている可能性は十分あるのですが、正しいビルド方法をご教示いただきたく、宜しくお願いいたします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

こんにちは。

取り敢えず前者の手順でやってみましたが、問題なくできているようです。「3.「Error in configuration process, project files may be invalid」」は出ませんでした。
後者の手順は正しい手順ではありません。Generatorは生成したいオブジェクトを生成できるものを指定します。

下記操作をしてます。

①OpenCV 3.0.0ソースを解凍
②ビルド用フォルダ生成
③CMakeを起動し、下記を指定する。
  Where is the source code: 解凍先フォルダ\source
  Where to build the binaries: ビルド用フォルダ
④Configureボタンを押し、表示されたダイアログで下記を選択。
  プルダウンリストから「Visual Studio 12 2013」を選択 
  ラジオボタンは「Use default native compilers」を選択 
⑤もう一度Configureボタンを押す。→赤い表示が全て白くなる。
⑥Generateボタンを押す。
⑦ビルド用フォルダのOpenCV.slnをダブル・クリックしてMSVC 2013起動
⑧MSVC 2013でビルドする。
  ビルド:56 正常終了、0 失敗、0 更新不要、24 スキップ

OSは、Windows 7 Ultimate 64bits版です。

あっと、WITH_CUDAはデフォルトでチェックされてました。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/12/18 13:54

    ご回答ありがとうございます。

    WITH_CUDAはCUDAをインストールしていればデフォルトでチェックされているようですね。失礼いたしました。

    今、記載いただいた手順通りに再度チャレンジしましたが、相変わらず「Error in configuration process, project files may be invalid」のエラーダイアログが出現しました。

    ちなみに、ふと目に入ったのですがCMake下部メッセージウィンドウの出力内容に下記のような記載がありました。

    --------------------
    The CXX compiler identification is MSVC 18.0.40629.0
    The C compiler identification is MSVC 18.0.40629.0
    Check for working CXX compiler using: Visual Studio 12 2013
    Check for working CXX compiler using: Visual Studio 12 2013 -- works
    Detecting CXX compiler ABI info
    Detecting CXX compiler ABI info - done
    Detecting CXX compile features
    Detecting CXX compile features - done
    Check for working C compiler using: Visual Studio 12 2013
    Check for working C compiler using: Visual Studio 12 2013 -- works
    Detecting C compiler ABI info
    Detecting C compiler ABI info - done
    Performing Test HAVE_CXX_FSIGNED_CHAR
    Performing Test HAVE_CXX_FSIGNED_CHAR - Failed
    Performing Test HAVE_C_FSIGNED_CHAR
    Performing Test HAVE_C_FSIGNED_CHAR - Failed
    Check if the system is big endian
    Searching 16 bit integer
    Looking for sys/types.h
    Looking for sys/types.h - found
    Looking for stdint.h
    Looking for stdint.h - found
    Looking for stddef.h
    Looking for stddef.h - found
    Check size of unsigned short
    Check size of unsigned short - done
    Using unsigned short
    Check if the system is big endian - little endian
    Looking for fseeko
    Looking for fseeko - not found
    Looking for unistd.h
    Looking for unistd.h - not found
    Check size of off64_t
    Check size of off64_t - failed
    Looking for assert.h
    Looking for assert.h - found
    Looking for fcntl.h
    Looking for fcntl.h - found
    Looking for io.h
    Looking for io.h - found
    Looking for jbg_newlen
    Looking for jbg_newlen - not found
    Looking for mmap
    Looking for mmap - not found
    Looking for search.h
    Looking for search.h - found
    Looking for string.h
    Looking for string.h - found
    Looking for unistd.h
    Looking for unistd.h - not found
    ICV: Removing previous unpacked package: C:/opencv/sources/3rdparty/ippicv/unpack
    ICV: Unpacking ippicv_windows_20141027.zip to C:/opencv/sources/3rdparty/ippicv/unpack...
    ICV: Package successfully downloaded
    found IPP (ICV version): 8.2.1 [8.2.1]
    at: C:/opencv/sources/3rdparty/ippicv/unpack/ippicv_win
    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
    Could NOT find Doxygen (missing: DOXYGEN_EXECUTABLE)
    To enable PlantUML support, set PLANTUML_JAR environment variable or pass -DPLANTUML_JAR=<filepath> option to cmake
    Could NOT find PythonInterp (missing: PYTHON_EXECUTABLE) (Required is at least version "2.7")
    Could NOT find PythonInterp (missing: PYTHON_EXECUTABLE) (Required is at least version "2.6")
    Could NOT find PythonInterp (missing: PYTHON_EXECUTABLE) (Required is at least version "3.4")
    Could NOT find PythonInterp (missing: PYTHON_EXECUTABLE) (Required is at least version "3.2")
    Could NOT find JNI (missing: JAVA_AWT_LIBRARY JAVA_JVM_LIBRARY JAVA_INCLUDE_PATH JAVA_INCLUDE_PATH2 JAVA_AWT_INCLUDE_PATH)
    Found Matlab: C:/Program Files/MATLAB/R2014b/bin/mex.bat
    VTK is not found. Please set -DVTK_DIR in CMake to VTK build directory, or to VTK install subdirectory with VTKConfig.cmake file
    videoio: Removing WinRT API headers by default
    ----------------------

    「unistd.h」や「jbg_newlen」、「mmap」等が見つかっていないようですが、これらは先のエラーログでちょうどエラー箇所となっていたものかと思います。
    これらが影響しているのでしょうか・・・?

    また、当方のエディションを確認したところWindows7 Professionalでした。
    まさかここが原因とは考えづらいですが、念のためご報告いたします。

    キャンセル

  • 2015/12/18 16:19 編集

    比べてみました。
    私のところでは、下記が出ていませんでした。
    > CUDA detected: 7.5
    > CUDA ...(略)

    また、
    > Other third-party libraries:
    :
    > Use Cuda: NO

    となっていましたので、どうもCUDAに対応したビルドになっていないようです。
    何故に、WITH_CUDAがチェックされるのかよく分かりませんが、こちらでエラーが出ないのはCUDAを有効にできていないからのようです。
    あああ、そういえば、このPCにはCUDAをインストールしていなかったかも知れません。ごめんなさい。

    で、どうもCUDA臭い気がしてちょっと調べて見たのですが、
    > http://www.gdep.jp/page/view/209

    によると、CUDA(SDK)は32bitと64bitの区別があるようです。

    > ・CUDA Toolkit およびGPU Computing SDK - complete package including all code samplesをダウンロードします。
    >  Toolkit, SDKは、32/64 bitのどちらかが選択できますが、これらはOSではなく、コンパイラにあわせて選択するようにしてください。

    確かに両方のバージョンがあるようです。32bitのCUDA SDKをインストールされていないのではないでしょうか?(両方とも入れてよいのかどうか把握していませんが、SDKがクロス・ビルドに対応していれば問題ないはずですね。)

    キャンセル

  • 2015/12/18 17:19

    ご確認いただきありがとうございます。

    WITH_CUDAにチェックがついているのに有効になっていないのは謎ですね。。。

    CUDAのSDKについて再度確認しましたが、32bit/64bit用の区別は7.0からなくなったようです。
    > http://www.softek.co.jp/SPG/Pgi/TIPS/public/accel/w_cuda75_install.html

    上記ページの「必要とするハードウェア、ソフトウェア環境」の項目最下部に記載がありました。

    ちなみに使用するCUDAのバージョンを下げれば解決はするかもしれませんが、諸事情により7.5を使わなければならず、根本的解決にはなりそうにありません。

    私も32bit用のSDKが必要かもしれないとは考えたものの、SDKが1種類しかなかったため違うものと判断しておりました。
    しかしそのあたりの設定をうまくしないといけないような気がしてまいりました。

    引き続きそのあたりの調査も進めたいと思います。

    キャンセル

  • 2015/12/18 23:34

    ついでにCUDA入れてみたところ、jty4kさんと同じエラーがでました。
    CUDA_cufft_LIBRARY等がNOTFOUNDと出てますね。64ビット・ビルドの時は"(略)/CUDA/v7.5/lib/x64/cufft.lib"となってますが、32ビット・ビルド時は"CUDA_cufft_LIBRARY-NOTFOUND"となり、CMakeが見つけられなかったようです。
    実際に該当フォルダの下を見てみても、cufft.libがx64には入ってますがWin32には入ってませんでした。

    cufft.lib Win32でググッてみたところ、下記が見つかりました。
    http://stackoverflow.com/questions/29889897/cufft-lib-for-win32-is-missing
    残念なことに、「もう32bitはサポートされていない」と回答があり+6されてました。

    キャンセル

  • 2015/12/19 14:01

    わざわざCUDAをインストールしてまでご確認いただきありがとうございます。

    なるほど、CUDAのSDKは32bit用/64bit用の区別を無くしたのではなく、32bit用はサポート外になったのですね。
    残念ですが確かにCUDAを使うようなPCに今時32bitOSは使わないのかもしれませんね。

    であればx86ビルドする際は「WITH_CUDA」のチェックを外してビルドする必要があるということですね。
    x86とx64で使用可能なライブラリに違いがあるのは気持ちが悪いですが、私の用途では32bit環境でCUDAは使わない為、この方法でいこうと思います。

    調べていただき、ありがとうございました。

    キャンセル

同じタグがついた質問を見る

  • OpenCV

    1469questions

    OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

  • CUDA

    105questions

    CUDAは並列計算プラットフォームであり、Nvidia GPU(Graphics Processing Units)向けのプログラミングモデルです。CUDAは様々なプログラミング言語、ライブラリ、APIを通してNvidiaにインターフェイスを提供します。

  • CMake

    92questions

    CMakeはクロスプラットフォームで作動するオープンソースのビルドシステムです。コマンドライン又は組み込まれた開発環境で使うことができる元のmakefileとプロジェクトファイルを生成します。