私は、ubuntu 12.04にopenCV 2.4.2をコンパイルしてインストールしました。 /usr/local/include
の下に、ディレクトリ/usr/local/opencv
および/usr/local/opencv2
があります。
これが私が書いたコードです。
#include <cv.h>
#include <highgui.h>
#include <iostream>
using namespace cv;
using namespace std;
int main(int argc,char **argv)
{
Mat image;
image = imread(argv[1],1);
if(argc != 2 || !image.data)
{
cout << "No image data\n";
return -1;
}
namedWindow("Display Image",CV_WINDOW_AUTOSIZE);
imshow("Display Image",image);
waitKey(0);
return 0;
}
このコマンドラインを使用してコンパイルしました。
g++ DisplayImage.cpp -o DisplayImage `pkg-config opencv --cflags --libs`
コンパイル時エラーはありませんでしたが、/DisplayImage code.png
で結果のバイナリを実行しようとすると、次のエラーメッセージが表示されます。
./DisplayImage: error while loading shared libraries: libopencv_core.so.2.4: cannot open shared object file: No such file or directory
ローダーが見つけられる場所に共有ライブラリを配置していません。 /usr/local/opencv
フォルダーと/usr/local/opencv2
フォルダーの中を見て、いずれかに共有ライブラリー(lib
で始まり、通常.so
で終わるファイル)が含まれているかどうかを確認します。それらを見つけたら、/etc/ld.so.conf.d/opencv.conf
というファイルを作成し、ライブラリが保存されているフォルダーへのパスを1行に1つずつ書き込みます。
たとえば、ライブラリが/usr/local/opencv/libopencv_core.so.2.4
の下に保存されている場合、これをopencv.conf
ファイルに書き込みます。
/usr/local/opencv/
次に実行する
Sudo ldconfig -v
ライブラリが見つからない場合は、実行してみてください
Sudo updatedb && locate libopencv_core.so.2.4
シェルで。 OpenCVのコンパイル後に再起動した場合は、updatedb
を実行する必要はありません。
参照:
Linuxの共有ライブラリについて: http://www.eyrie.org/~eagle/notes/rpath.html
OpenCV共有ライブラリの追加について: http://opencv.willowgarage.com/wiki/InstallGuide_Linux
それをより明確にする(そしてまとめる)ために、私は上記の2つのことをしなければなりませんでした。
1-ファイル/etc/ld.so.conf.d/opencv.conf
を作成し、opencvライブラリが保存されているフォルダーのパスに書き込みます。(Cookytによる回答)
2- LD_LIBRARY_PATH()にopencvの.so
ファイルのパスを含めます
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/opencv/lib
Umair Rの答えは、この問題がopencv libsとプログラム間のリンクの欠落によって引き起こされていたため、ほとんどが問題を解決するための正しい動きです。そのため、ld_libraty_path構成を指定する必要があります。追伸通常のライブラリパスは次のようになります。
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
私はこれを試しましたが、うまくいきました。
次のコマンドラインを使用して、共有ライブラリlibopencv_core.so.2.4を含むフォルダーを見つけます。
Sudo find / -name "libopencv_core.so.2.4*"
それから私は結果を得ました:
/usr/local/lib/libopencv_core.so.2.4.
/etc/ld.so.conf.d/opencv.conf
というファイルを作成し、バイナリが保存されているフォルダーへのパスを書き込みます。たとえば、/usr/local/lib/
をopencv.conf
ファイルに書き込みました。次のようにコマンドラインを実行します。
Sudo ldconfig -v
コマンドを再実行してください。
このリンクを追加してください:
/usr/local/lib/*.so.*
合計は:
g++ -o main.out main.cpp -I /usr/local/include -I /usr/local/include/opencv -I /usr/local/include/opencv2 -L /usr/local/lib /usr/local/lib/*.so /usr/local/lib/*.so.*