にせねこメモ

はてなダイアリーがUTF-8じゃないので移ってきました。

Visual Studio 2013 でプロジェクトのディレクトリ内にライブラリをインストールする

Visual Studio で外部ライブラリを使った場合、普通はライブラリをインストールしたシステム上でしか動かせない。
そこで、ライブラリをプロジェクトと同じフォルダに突っ込むことで、同じバージョンの Visual Studio をインストールした他のPCに持っていってもそのままコンパイルができるようにすることができる。

講習会とかで学生無料のVisual Studioインストールしたけどライブラリを各人でインストールさせるのは面倒だからこのプロジェクトそのまま使って、みたいな感じには役立つかもしれない。

手順

ここではOpenCVの場合を考える。そうでない場合でも大して変わらないはず。

ライブラリは

からなっている。そのため、それらが参照できる状態になっている必要がある。

そこで、これらのファイルを含んだライブラリをプロジェクトの入っているディレクトリに突っ込んで、ディレクトリの相対パスで指定するようにすれば、システムにインストールせずともOpenCVを使ったプログラムがコンパイル・実行できるようになる。

プロジェクト作成

まず、新しいプロジェクトを作成する。「ファイル」→「新規作成」→「プロジェクト」から新しいプロジェクトのウィンドウを開く。
ここでは「Visual C++」の「Win32 コンソールアプリケーション」を選択、プロジェクトの名前とかは適当に入力しOKをクリック。
f:id:nixeneko:20150705230253p:plain
Win32 アプリケーションウィザードが開くので適当に設定する。

作成したプロジェクトのフォルダにライブラリを入れる

以下フォルダの名前や構造については設定で整合性がついていればいいので適当に。

ここでは "C:\vsproject\opencvlibinstall" が作成したプロジェクトの入っているディレクトリである。
ここに “Library” フォルダを作成する。
f:id:nixeneko:20150705231206p:plain

Library フォルダ内に opencv フォルダを作成する。
f:id:nixeneko:20150705232554p:plain

作成した opencv フォルダ内に、展開したOpenCVライブラリの build フォルダの中身を突っ込む。
f:id:nixeneko:20150705232918p:plain

Visual Studioの構成プロパティでコンパイル時に必要なものを設定する

ここではライブラリにパスを通すことで使えるようにする。ここで、パスを設定する際に、

  • $(SolutionDir)Library\opencv\include
  • $(SolutionDir)Library\opencv\x86\vc12\lib

などのようにマクロ $(~) を使うことで相対的にディレクトリを指定できる。 $(SolutionDir) はソリューションファイルがあるディレクトリを示す(ここでは"C:\vsproject\opencvlibinstall\")。ディレクトリの表現は\で終わる形になっているので余計な\を入れないように。
マクロの一覧はパス設定を行うウィンドウの「マクロ」ボタンをクリックすると一覧が確認できる。他には $(ProjectDir) なども使えるかもしれない(プロジェクトファイルのあるディレクトリを示す)。


ソリューションエクスプローラからプロジェクト名を右クリックしプロパティを開く(あるいは、メニューからプロジェクト→~のプロパティ)。

構成プロパティ下のVC++ディレクトリタブを開く。
f:id:nixeneko:20150705234552p:plain

インクルードディレクトリにヘッダファイルのディレクトリを追加する。「インクルードディレクトリ」の項目をクリックすると右端に出てくる逆三角のボタンをクリック、「<編集...>」をクリック。

$(SolutionDir)Library\opencv\include

を追加する。
f:id:nixeneko:20150705235449p:plain

次に、ライブラリディレクトリに.libファイルのディレクトリを同様に追加する。
ここで、ライブラリディレクトリについて、 32ビットアプリケーション用であれば x86, 64ビットアプリケーション用であれば x64 のフォルダを選ぶ。さらにその中で、 vc10 が Visual Studio 2010 用, vc11 が Visual Studio 2012 用, vc12 が Visual Studio 2013 用なので自分の環境にあった物を選ぶ。そのフォルダの下にあるのが
ここでは、Visual Studio 2013で32ビットアプリケーションを作成しているので、ディレクトリは x86\vc12\lib であり、次を追加することになる。

$(SolutionDir)Library\opencv\x86\vc12\lib

f:id:nixeneko:20150705235609p:plain


左ペインで リンカー→入力 タブを開く。
f:id:nixeneko:20150705235900p:plain
「追加の依存ファイル」に、使いたい .lib ファイルを追加する。ここでは、
opencv_video2410d.lib;opencv_ml2410d.lib;opencv_legacy2410d.lib;opencv_core2410d.lib;opencv_highgui2410d.lib;opencv_imgproc2410d.lib;opencv_features2d2410d.lib
を追加した。
f:id:nixeneko:20150706000013p:plain

実行時必要となるDLLファイルを適切な場所に

DLLファイルは実行ファイルと同じディレクトリ、すなわちソリューションディレクトリの下の Debug に突っ込んだらなんとかなった。
ここでは、展開した OpenCV の実行ファイルのディレクトリ build\x86\vc12\bin (.libファイルのディレクトリと同様に環境によって適当なものを選ぶ) の中のファイルを全て
C:\vsproject\opencvlibinstall\Debug
の中にコピーした。
f:id:nixeneko:20150706000907p:plain

これはもっとうまい指定方法があるかもしれない。

サンプルの実行

以上で使えるようになっているはずなので、サンプルコードを実行してみる。

この4.5を実行した。
f:id:nixeneko:20150706001700p:plain
動いた。