web-dev-qa-db-ja.com

openCVプログラムのコンパイルエラー「libopencv_core.so.2.4:ubuntu 12.04で共有オブジェクトファイルを開けません:そのようなファイルまたはディレクトリはありません」

私は、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
54
linkrules

ローダーが見つけられる場所に共有ライブラリを配置していません。 /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

95
Cookyt

それをより明確にする(そしてまとめる)ために、私は上記の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
21
Umair R

Umair Rの答えは、この問題がopencv libsとプログラム間のリンクの欠落によって引き起こされていたため、ほとんどが問題を解決するための正しい動きです。そのため、ld_libraty_path構成を指定する必要があります。追伸通常のライブラリパスは次のようになります。

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib

私はこれを試しましたが、うまくいきました。

17
Andol Li

次のコマンドラインを使用して、共有ライブラリ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

コマンドを再実行してください。

10
codeislife

このリンクを追加してください:

/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.*
0
misakawa