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

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

新規登録して質問してみよう
ただいま回答率
85.48%
CMake

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

CUDA

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

OpenCV

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

Q&A

解決済

1回答

23747閲覧

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

jty4k

総合スコア19

CMake

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

CUDA

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

OpenCV

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

0グッド

0クリップ

投稿2015/12/18 03:29

お世話になります。
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つの方法を試しましたがうまくいきませんでした。
見当はずれなことをしている可能性は十分あるのですが、正しいビルド方法をご教示いただきたく、宜しくお願いいたします。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

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 03:48

編集2015/12/18 03:49
Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jty4k

2015/12/18 04: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でした。 まさかここが原因とは考えづらいですが、念のためご報告いたします。
Chironian

2015/12/18 07: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がクロス・ビルドに対応していれば問題ないはずですね。)
jty4k

2015/12/18 08: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種類しかなかったため違うものと判断しておりました。 しかしそのあたりの設定をうまくしないといけないような気がしてまいりました。 引き続きそのあたりの調査も進めたいと思います。
Chironian

2015/12/18 14: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されてました。
jty4k

2015/12/19 05:01

わざわざCUDAをインストールしてまでご確認いただきありがとうございます。 なるほど、CUDAのSDKは32bit用/64bit用の区別を無くしたのではなく、32bit用はサポート外になったのですね。 残念ですが確かにCUDAを使うようなPCに今時32bitOSは使わないのかもしれませんね。 であればx86ビルドする際は「WITH_CUDA」のチェックを外してビルドする必要があるということですね。 x86とx64で使用可能なライブラリに違いがあるのは気持ちが悪いですが、私の用途では32bit環境でCUDAは使わない為、この方法でいこうと思います。 調べていただき、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問