Ho compilato e installato openCV 2.4.2 in Ubuntu 12.04. Sotto /usr/local/include
posso vedere le directory /usr/local/opencv
e /usr/local/opencv2
.
Ecco il codice che ho scritto:
#include #include #include 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; }
L’ho compilato usando questa riga di comando:
g++ DisplayImage.cpp -o DisplayImage `pkg-config opencv --cflags --libs`
Non ci sono stati errori di compilazione, tuttavia quando provo a eseguire il file binario risultante con /DisplayImage code.png
viene visualizzato il seguente messaggio di errore:
./DisplayImage: error while loading shared libraries: libopencv_core.so.2.4: cannot open shared object file: No such file or directory
Non hai messo la libreria condivisa in una posizione in cui il caricatore può trovarla. guarda all’interno delle cartelle /usr/local/opencv
e /usr/local/opencv2
e verifica se uno di essi contiene librerie condivise (file che iniziano in lib
e terminano solitamente in .so
). quando li trovi, crea un file chiamato /etc/ld.so.conf.d/opencv.conf
e /etc/ld.so.conf.d/opencv.conf
i percorsi delle cartelle in cui sono memorizzate le librerie, una per riga.
ad esempio, se le librerie fossero archiviate in /usr/local/opencv/libopencv_core.so.2.4
, scriverei questo nel mio file opencv.conf
:
/usr/local/opencv/
Quindi corri
sudo ldconfig -v
Se non riesci a trovare le librerie, prova a eseguire
sudo updatedb && locate libopencv_core.so.2.4
in una shell. Non è necessario eseguire updatedb
se si è riavviato dalla compilazione di OpenCV.
Riferimenti:
Informazioni sulle librerie condivise su Linux: http://www.eyrie.org/~eagle/notes/rpath.html
Informazioni sull’aggiunta delle librerie condivise OpenCV: http://opencv.willowgarage.com/wiki/InstallGuide_Linux
Per renderlo più chiaro (e per metterlo insieme) ho dovuto fare due cose sopra menzionate.
1- Crea un file /etc/ld.so.conf.d/opencv.conf
e scrivici i percorsi della cartella in cui sono memorizzate le tue librerie opencv. (Risposta di Cookyt)
2- Includere il percorso dei file .so
di opencv in LD_LIBRARY_PATH ()
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/opencv/lib
La risposta di Umair R è principalmente la mossa giusta per risolvere il problema, poiché questo errore era causato dai collegamenti mancanti tra le librerie opencv e il programma. quindi c’è la necessità di specificare la configurazione di ld_libraty_path. ps. il solito percorso della libreria dovrebbe essere:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
Ho provato questo e ha funzionato bene.
Trova la cartella contenente la libreria condivisa libopencv_core.so.2.4 utilizzando la seguente riga di comando.
sudo find / -name "libopencv_core.so.2.4*"
Poi ho ottenuto il risultato:
/usr/local/lib/libopencv_core.so.2.4.
Creare un file chiamato /etc/ld.so.conf.d/opencv.conf
e scrivere su di esso il percorso della cartella in cui è memorizzato il binario. Ad esempio, ho scritto /usr/local/lib/
sul mio opencv.conf
file. Esegui la riga di comando come segue.
sudo ldconfig -v
Prova a eseguire di nuovo il comando.
Aggiungi questo link:
/usr/local/lib/*.so.*
Il totale è:
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.*