最近、OpenCV やOpenGL 、DirectShow などのライブラリを使う機会が増えてきたので、ライブラリの使い方をまとめておきます。
ライブラリと一言いっても、スタティックライブラリ 、ダイナミックライブラリ 、.NETのクラスライブラリ などとあるのですが、比較的一般的?なダイナミックライブラリの使用方法を紹介します。
ダイナミックライブラリを使用するには、下記の3点セットが必要となります。
ダイナミックリンクライブラリファイル(*.dll)
ライブラリファイル(*.lib)
ヘッダファイル(インクルードファイル)(*.h)
各ライブラリで何のファイルが必要かは調べて置いて下さい。
*.dllファイルはプログラムの実行時、*.lib、*.hファイルはプログラミング中に必要となります。
また、ライブラリのバージョン、Release用/Debug用とでファイルが異なる場合もあります。
ライブラリを使用するための設定方法もいくつかあるので、私の思う一般的な方法は以下の通りです。
ダイナミックライブラリファイル(*.dll)の参照設定方法(環境変数Pathの設定)
ライブラリをインストールし、*.dllファイルがインストールされたパスを環境変数のPathに設定します。
※このPathの設定はライブラリのインストーラにより自動的に設定される場合もあります。
設定方法は、スタートメニュー から、コンピュータ を右クリックし、プロパティ を選択します。
次に表示されたウィンドウのシステムの詳細設定 をクリック
詳細設定 のタブを選択し、右下の環境変数 のボタンをクリック
すると下図のように××のユーザー環境変数 とシステム環境変数 と2種類表示され、両方ともにPathの項目があるのですが、××のユーザー環境変数 のPathを設定するとWindowsにログインしたときのユーザーのみでPathの設定が有効となり、システム環境変数 のPathを設定すると全ユーザーでPathの設定が有効となります。
私は『ログインしたユーザーを変えるとプログラムが起動しないんだけど?!』とか言われたく無いので、システム環境変数 のPathを設定 するようにしています。
そして、Path の項目を選択し、編集ボタン をクリックします。
そして、編集値の欄に*.dll ファイルがインストールされているパス(フォルダ名のフルパス)をセミコロン(; )に続けて記載します。
(例)
;C:\Program Files\OpenCV\bin
また、この*.dllファイルのパスは必ずしも設定する必要はなく、プログラム(*.exe)のある同一フォルダやC:\Windows\System32 フォルダ内に*.dllファイルを入れておくだけでも大丈夫なのですが、プログラムから*.dllファイルを参照するときの優先順位は下記のようになっています。
アプリケーション(*.exe)と同じフォルダ
カレントディレクトリ
システムディレクトリ(C:\Windows\System32 など)
16Bitシステムディレクトリ(C:\Windows\System など)
Windowsディレクトリ(C:\Windows など)
PATH環境変数に列挙されているディレクトリ
ライブラリファイル(*.lib)の参照設定方法
各ライブラリにおいて、どの*.libファイルが必要なのかは調べておき、それぞれのファイルの参照設定を行います。
まずは、*.libファイルが入っているパスの参照設定を行います。
メニューのプロジェクト →(プロジェクト名)のプロパティ をクリックします。
開いたウィンドウの構成のプロパティ→リンカ→全般 を選択し、追加のライブラリディレクトリ にそのまま、*.libファイルのあるパスを設定するか、右側にある・・・のボタンをクリックします。
すると追加のライブラリディレクトリ のウィンドウが表示されるので、・・・のボタンをクリックし、フォルダのボタンをクリックして*.libファイルのあるフォルダを指定します。
ライブラリによっては、参照する順番を指定しなければならない物もあるので、その場合は右上にある ↓ ↑ ボタンで順番を入れ替えます。
次に実際に使用する*.libファイルを設定します。
構成のプロパティ→リンカ→入力の追加の依存ファイルの部分に*.libファイルを入力します。
必要な*.libファイルがある場合は、空白(スペース)で区切って入力します。
他にもプログラム中で*.libファイルを直接していする事もできます。
例)
#pragma comment(lib,”C:\\Program Files\\OpenCV\\lib\\cv.lib”)
インクルードファイル(*.h)の参照設定方法
インクルードファイル(ヘッダファイル)(*.h)のあるパスを設定します。
設定方法は
メニューのプロジェクト→(プロジェクト名)のプロパティ を クリックします。
構成プロパティ→C/C++→全般の追加のインクルードディレクトリ の欄の右側にある・・・ボタンをクリックします。
ヘッダファイルのパスを追加設定するには右上のフォルダのアイコンをクリックします。
ボタンをクリックすると、・・・のボタンをクリックすると、ディレクトリの選択のウィンドウが表示されるので、*.hファイルが入っているパスを設定します。
そして、プログラム中では
#include <cv.h>
のように設定します。
C++/CLIからライブラリを使用する場合
.NETで作られたライブラリでは無いライブラリを使う場合は、メニューのプロジェクト→(プロジェクト名)のプロパティ を クリック、構成プロパティ→全般の共通言語ランタイムサポート の欄を
純粋MSIL共通言語ランタイムサポート(/clr:pure)
から
共通言語ランタイムサポート(/clr)
に変更します。
その他
*.libファイル、*.hファイルの設定にはDebug用とRelease用の設定がそれぞれありますので、両方設定して下さい。
DebugとReleaseとで設定するファイル名が異なる場合もあるのでご注意下さい。
また、メニューのツール→オプション で表示されたウィンドウのプロジェクトおよびソリューション→VC++ディレクトリ で、インクルードファイル(*.h)、ライブラリファイル(*.lib)の参照ディレクトリの設定が可能です。(VS2010は非推奨)
逆に言うと、ここに設定されているフォルダにインクルードファイル(*.h)やライブラリファイル(*.lib)を置いても参照する事が可能です。(個人的にはあまりやりませんが...)
トラブルシューティング
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 に変更して下さい。
←Visual Studioへ戻る