wake-up-neo.com

openCV-Programmkompilierungsfehler "libopencv_core.so.2.4: Datei für freigegebene Objekte kann nicht geöffnet werden: Keine solche Datei oder Verzeichnis" in Ubuntu 12.04

Ich habe openCV 2.4.2 in Ubuntu 12.04 kompiliert und installiert. Unter /usr/local/include sehe ich die Verzeichnisse /usr/local/opencv und /usr/local/opencv2.

Hier ist der Code, den ich geschrieben habe:

#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;
}

Ich habe es mit dieser Befehlszeile kompiliert:

g++ DisplayImage.cpp -o DisplayImage `pkg-config opencv --cflags --libs` 

Es sind keine Fehler bei der Kompilierung aufgetreten. Wenn Sie jedoch versuchen, die resultierende Binärdatei mit /DisplayImage code.png auszuführen, wird die folgende Fehlermeldung angezeigt:

./DisplayImage: error while loading shared libraries: libopencv_core.so.2.4: cannot open shared object file: No such file or directory
54
linkrules

Sie haben die gemeinsam genutzte Bibliothek nicht an einem Ort abgelegt, an dem der Loader sie finden kann. Schauen Sie in die Ordner /usr/local/opencv und /usr/local/opencv2 und prüfen Sie, ob einer der Ordner gemeinsam genutzte Bibliotheken enthält (Dateien, die mit lib beginnen und normalerweise mit .so enden). Wenn Sie sie gefunden haben, erstellen Sie eine Datei mit dem Namen /etc/ld.so.conf.d/opencv.conf und schreiben Sie die Pfade zu den Ordnern, in denen die Bibliotheken gespeichert sind, in eine Zeile pro Zeile. 

wenn die Bibliotheken beispielsweise unter /usr/local/opencv/libopencv_core.so.2.4 gespeichert wurden, schreibe ich dies in meine opencv.conf-Datei:

/usr/local/opencv/

Dann renne 

Sudo ldconfig -v

Wenn Sie die Bibliotheken nicht finden können, versuchen Sie es auszuführen

Sudo updatedb && locate libopencv_core.so.2.4

in einer Shell. Sie müssen updatedb nicht ausführen, wenn Sie seit dem Kompilieren von OpenCV einen Neustart durchgeführt haben.

Verweise:

Über freigegebene Bibliotheken unter Linux: http://www.eyrie.org/~eagle/notes/rpath.html

Informationen zum Hinzufügen der gemeinsam genutzten OpenCV-Bibliotheken: http://opencv.willowgarage.com/wiki/InstallGuide_Linux

92
Cookyt

Um es klarer zu machen (und um es zusammenzusetzen), musste ich zwei oben erwähnte Dinge tun.

1- Erstellen Sie eine Datei /etc/ld.so.conf.d/opencv.conf und geben Sie die Pfade des Ordners ein, in dem Ihre opencv-Bibliotheken gespeichert sind. (Answer by Cookyt)

2- Geben Sie den Pfad der .so-Dateien Ihrer opencv in LD_LIBRARY_PATH () an.

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/opencv/lib
21
Umair R

Die Antwort von Umair R ist meistens der richtige Schritt, um das Problem zu lösen, da dieser Fehler früher auf fehlende Links zwischen opencv libs und dem Programm zurückzuführen ist. Daher ist es erforderlich, die Konfiguration von ld_libraty_path . ps anzugeben. Der übliche Bibliothekspfad lautet:

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

Ich habe es versucht und es hat gut funktioniert.

17
Andol Li

Suchen Sie den Ordner mit der gemeinsam genutzten Bibliothek libopencv_core.so.2.4 mithilfe der folgenden Befehlszeile.

Sudo find / -name "libopencv_core.so.2.4*"

Dann bekam ich das Ergebnis:

 /usr/local/lib/libopencv_core.so.2.4.

Erstellen Sie eine Datei mit dem Namen /etc/ld.so.conf.d/opencv.conf und schreiben Sie den Pfad zu dem Ordner, in dem die Binärdatei gespeichert ist. Zum Beispiel schrieb ich /usr/local/lib/ in meine opencv.conf-Datei . Führen Sie die Befehlszeile wie folgt aus.

Sudo ldconfig -v

Versuchen Sie den Befehl erneut auszuführen.

9
codeislife

Fügen Sie diesen Link hinzu:

/usr/local/lib/*.so.*

Die Summe ist:

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