質問: お世話になります。 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ドライブ直下へ保存 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ドライブ直下へ保存 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つの方法を試しましたがうまくいきませんでした。 見当はずれなことをしている可能性は十分あるのですが、正しいビルド方法をご教示いただきたく、宜しくお願いいたします。
回答: こんにちは。 取り敢えず前者の手順でやってみましたが、問題なくできているようです。「3.「Error in configuration process, project files may be invalid」」は出ませんでした。 後者の手順は正しい手順ではありません。Generatorは生成したいオブジェクトを生成できるものを指定します。 下記操作をしてます。 1OpenCV 3.0.0ソースを解凍 2ビルド用フォルダ生成 3CMakeを起動し、下記を指定する。 Where is the source code: 解凍先フォルダ\source Where to build the binaries: ビルド用フォルダ 4Configureボタンを押し、表示されたダイアログで下記を選択。 プルダウンリストから「Visual Studio 12 2013」を選択 ラジオボタンは「Use default native compilers」を選択 5もう一度Configureボタンを押す。→赤い表示が全て白くなる。 6Generateボタンを押す。 7ビルド用フォルダのOpenCV.slnをダブル・クリックしてMSVC 2013起動 8MSVC 2013でビルドする。 ビルド:56 正常終了、0 失敗、0 更新不要、24 スキップ OSは、Windows 7 Ultimate 64bits版です。 あっと、WITH_CUDAはデフォルトでチェックされてました。