HOME REPORT VISUAL STUDIO 2017 + OPENCV (静的リンク) 要CMAKE

Visual Studio 2017 + OpenCV (静的リンク) 要CMake

概要
OpenCV 4.1.1 を使った開発環境を構築するのに少し手間取ったのでメモを残します。基本的には自分の場合はこれでうまく行った、という話です。
レポート日
2019.9.6

基本的なこと

1.dll は exe と同じフォルダに置いておけば大抵動く。

2.必要な *.h (*.hpp) と *.lib ファイルがあれば大抵ビルドは通る。つまり不足していたらビルドが通らない。

環境変数を変更して開発するのが嫌な場合には exe の書き出されるフォルダに dll を置くかスタティックリンク、つまり、dll の機能に相当するものを exe にくっつけてしまうのが便利です。

※CMake を使います

環境の構築

1.opencv-4.1.1-vc14_vc15 ファイルをダウンロードして実行、好きな場所に解凍します。

2.解凍して出てきた Build フォルダはいらないので削除。

3.CMake を起動する。Where is the source code に先程解凍されたときに出てきた source フォルダを指定、Where to build the binaries には好きなフォルダ(以下、書き出しフォルダと呼ぶ)を指定。

3.Configure を押す。初回は基本設定が出るので構築したい環境を設定して Finish ボタンを押す。

4.CMake の上の欄で赤い行が設定すべき項目。必要なものにチェックしたりパスを設定したりする。最初は真っ赤なはず。項目を設定後もう一度 Configure ボタンを押す。BUILD_SHARED_LIBS を外すとスタティックリンク用の lib ファイルが作られる設定のプロジェクトが作られる。BUILD_opencv_world にはチェックを入れておいたほうがいいかも (16.参照)。

5.メッセージ欄にエラーが出るようならエラーを直す。どうにもならなくなったら書き出しフォルダを削除して 3.からやり直し。

7.赤い行が出なくなるまで Configure を押して赤い行の項目のチェックするかしないかを判断する。メッセージをよく見るように。

8.Generate ボタンを押してプロジェクトを作る。

9.Open Project を押して Visual Studio を立ち上げる。

11.Debug 構成でソリューションエクスプローラーの INSTALL プロジェクトを右クリック → Build。書き出しフォルダを開くとInstall というフォルダができているのでどこかに名前を変えて移動(例. x86debug 等)。

12.PDB ファイルが書き出しフォルダの bin → Debug に入るのでデバッグ情報が必要ならこれもコピーして Install の中にある lib ファイルと同じ場所(15.参照)に移しておく。他にも PDB ファイルは散らばって存在するので *.PDB で検索して必要なものをコピーする。

13.Release 構成で ReBuild をする。ソリューションエクスプローラーから右クリックで ReBuild。x86 x64 Debug Relase と構築したい対象があれば4回やることになる。

14.コピーされた Install フォルダのコピーの中にある inlcude フォルダの中のヘッダファイルは同じものなので1つ残して他は削除。この中にあるヘッダファイルを自分の作るプログラムのソースファイルにインクルードする。

15.Install フォルダの中にある x64 or x86 → vcXX (XX は VS のバージョン) → staticlib の中に lib ファイルがある。これをどこかにコピーしてリンクの対象にする。dll があった場合には パスの通ったフォルダに置くか、自分の作るプログラムの exe が書き出されるのと同じフォルダにコピーを置く。ffmpeg の dll はとっておいたほうがいいかも。

16.ade.lib と ippicvmt.lib だけ Debug と Release のファイル名がなぜか同じなので aded.lib ippicvmtd.lib とリネームしておく。

17.OpenCV のプログラムを作る場合にはプロジェクトの設定で include フォルダのパスはインクルードの追加設定で lib ファイルのあるフォルダはリンクの追加設定でそれぞれ指定する。VC++ の項目でも C++ の項目でもどちらでも構わない。ビルド構成に応じて lib ファイル名が変わるので、#pragma comment 等のプリプロセッサ宣言でリンクする lib ファイルを切り替えるようにする。全ての lib をリンクすること。

18.プロジェクトのプロパティ、Linker(リンカー) → Input(入力) → Additional Dependencies(追加の依存設定) に Opencv_world411.lib を設定する。Opencv_world411.lib がない場合は多分たくさんの lib ファイルを追加すればうまくいく?(未確認)

以上です。