最近、OpenCVやOpenGL、DirectShowなどのライブラリを使う機會が増えてきたので、ライブラリの使い方をまとめておきます。
ライブラリと一言いっても、スタティックライブラリ、ダイナミックライブラリ、.NETのクラスライブラリなどとあるのですが、比較的一般的?なダイナミックライブラリの使用方法を紹介します。
ダイナミックライブラリを使用するには、下記の3點セットが必要となります。
- ダイナミックリンクライブラリファイル(*.dll)
- ライブラリファイル(*.lib)
- ヘッダファイル(インクルードファイル)(*.h)
各ライブラリで何のファイルが必要かは調べて置いて下さい。
*.dllファイルはプログラムの実行時、*.lib、*.hファイルはプログラミング中に必要となります。
また、ライブラリのバージョン、Release用/Debug用とでファイルが異なる場合もあります。
ライブラリを使用するための設定方法もいくつかあるので、私の思う一般的な方法は以下の通りです。
1、ダイナミックライブラリファイル(*.dll)の參照設定方法
ライブラリをインストールし、*.dllファイルがインストールされたパスを環境変數のPathに設定します。
※このPathの設定はライブラリのインストーラにより自動的に設定される場合もあります。
設定方法は、スタートメニューから、コンピュータを右クリックし、プロパティを選択します。

次に表示されたウィンドウのシステムの詳細設定をクリック

詳細設定のタブを選択し、右下の環境変數のボタンをクリック

すると下図のように××のユーザー環境変數とシステム環境変數と2種類表示され、両方ともにPathの項目があるのですが、××のユーザー環境変數のPathを設定するとWindowsにログインしたときのユーザーのみでPathの設定が有効となり、システム環境変數のPathを設定すると全ユーザーでPathの設定が有効となります。
私は『ログインしたユーザーを変えるとプログラムが起動しないんだけど?!』とか言われたく無いので、システム環境変數のPathを設定 するようにしています。
そして、Pathの項目を選択し、編集ボタンをクリックします。

そして、編集値の欄に*.dllファイルがインストールされているパス(フォルダ名のフルパス)をセミコロン(;)に続けて記載します。
(例)
;C:\Program Files\OpenCV\lib

また、この*.dllファイルのパスは必ずしも設定する必要はなく、プログラム(*.exe)のある同一フォルダやC:\Windows\System32フォルダ內に*.dllファイルを入れておくだけでも大丈夫なのですが、プログラムから*.dllファイルを參照するときの優先順位は下記のようになっています。
- アプリケーション(*.exe)と同じフォルダ
- カレントディレクトリ
- システムディレクトリ(C:\Windows\System32 など)
- 16Bitシステムディレクトリ(C:\Windows\System など)
- Windowsディレクトリ(C:\Windows など)
- PATH環境変數に列挙されているディレクトリ
2、ライブラリファイル(*.lib)の參照設定方法
各ライブラリにおいて、どの*.libファイルが必要なのかは調べておき、それぞれのファイルの參照設定を行います。
まずは、*.libファイルが入っているパスの參照設定を行います。
メニューのプロジェクト→(プロジェクト名)のプロパティをクリックします。

開いたウィンドウの構成のプロパティ→リンカ→全般を選択し、追加のライブラリディレクトリにそのまま、*.libファイルのあるパスを設定するか、右側にある・・・のボタンをクリックします。

すると追加のライブラリディレクトリのウィンドウが表示されるので、・・・のボタンをクリックし、フォルダのボタンをクリックして*.libファイルのあるフォルダを指定します。

ライブラリによっては、參照する順番を指定しなければならない物もあるので、その場合は右上にある ↓ ↑ ボタンで順番を入れ替えます。
次に実際に使用する*.libファイルを設定します。
構成のプロパティ→リンカ→入力の追加の依存ファイルの部分に*.libファイルを入力します。
必要な*.libファイルがある場合は、空白(スペース)で區切って入力します。

他にもプログラム中で*.libファイルを直接していする事もできます。
例)
#pragma comment(lib,"C:\\Program Files\\OpenCV\\lib\\cv.lib")
3、インクルードファイル(*.h)の參照設定方法
インクルードファイル(ヘッダファイル)(*.h)のあるパスを設定します。
設定方法は
メニューのプロジェクト→(プロジェクト名)のプロパティを クリックします。
構成プロパティ→C/C++→全般の追加のインクルードディレクトリの欄の右側にある・・・ボタンをクリックします。

ヘッダファイルのパスを追加設定するには右上のフォルダのアイコンをクリックします。

ボタンをクリックすると、・・・のボタンをクリックすると、ディレクトリの選択のウィンドウが表示されるので、*.hファイルが入っているパスを設定します。

そして、プログラム中では
#include <cv.h>
のように設定します。
4、C++/CLIからライブラリを使用する場合
.NETで作られたライブラリでは無いライブラリを使う場合は、メニューのプロジェクト→(プロジェクト名)のプロパティを クリック、構成プロパティ→全般の共通言語ランタイムサポートの欄を
純粋MSIL共通言語ランタイムサポート(/clr:pure)
から
共通言語ランタイムサポート(/clr)
に変更します。

5、その他
*.libファイル、*.hファイルの設定にはDebug用とRelease用の設定がそれぞれありますので、両方設定して下さい。
DebugとReleaseとで設定するファイル名が異なる場合もあるのでご注意下さい。

また、メニューのツール→オプションで表示されたウィンドウのプロジェクトおよびソリューション→VC++ディレクトリで、インクルードファイル(*.h)、ライブラリファイル(*.lib)の參照ディレクトリの設定が可能です。(VS2010は非推奨)
逆に言うと、ここに設定されているフォルダにインクルードファイル(*.h)やライブラリファイル(*.lib)を置いても參照する事が可能です。(個人的にはあまりやりませんが...)

6、トラブルシューティング
- LINK : fatal error LNK1104: ファイル '×××.lib' を開くことができません。
fatal error C1083: include ファイルを開けません。'cv.h': No such file or directory
*.libファイル、*.hファイルが指定したフォルダに存在しているか?
また、*.libファイル、*.hのファイル名が正しいか?
確認してみて下さい。 - fatal error C1189: #error : ERROR: EMM intrinsics not supported in the pure mode!
共通言語ランタイムサポートの設定を/clr:pureから/clrに変更して下さい。
