web-dev-qa-db-fra.com

erreur de compilation du programme openCV "libopencv_core.so.2.4: impossible d'ouvrir le fichier d'objet partagé: aucun fichier ni répertoire de ce type" dans Ubuntu 12.04

J'ai compilé et installé OpenCV 2.4.2 dans Ubuntu 12.04. Sous /usr/local/include, je peux voir les répertoires /usr/local/opencv et /usr/local/opencv2.

Voici le code que j'ai écrit:

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

Je l'ai compilé en utilisant cette ligne de commande:

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

Il n'y a pas eu d'erreur de compilation, mais lorsque j'essaie d'exécuter le binaire résultant avec /DisplayImage code.png, le message d'erreur suivant s'affiche:

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

Vous n'avez pas placé la bibliothèque partagée à un emplacement où le chargeur peut la trouver. Regardez à l'intérieur des dossiers /usr/local/opencv et /usr/local/opencv2 et voyez si l'une d'entre elles contient des bibliothèques partagées (fichiers commençant par lib et se terminant généralement par .so). Lorsque vous les trouvez, créez un fichier appelé /etc/ld.so.conf.d/opencv.conf et écrivez-y les chemins des dossiers de stockage des bibliothèques, un par ligne. 

par exemple, si les bibliothèques étaient stockées sous /usr/local/opencv/libopencv_core.so.2.4, j'écrirais ceci dans mon fichier opencv.conf:

/usr/local/opencv/

Puis courir 

Sudo ldconfig -v

Si vous ne trouvez pas les bibliothèques, essayez de lancer

Sudo updatedb && locate libopencv_core.so.2.4

dans une coquille. Vous n'avez pas besoin d'exécuter updatedb si vous avez redémarré depuis la compilation d'OpenCV.

Références:

À propos des bibliothèques partagées sous Linux: http://www.eyrie.org/~eagle/notes/rpath.html

À propos de l'ajout des bibliothèques partagées OpenCV: http://opencv.willowgargarage.com/wiki/InstallGuide_Linux

92
Cookyt

Pour le rendre plus clair (et le mettre ensemble), je devais faire deux choses mentionnées ci-dessus.

1- Créez un fichier /etc/ld.so.conf.d/opencv.conf et écrivez-y les chemins du dossier où sont stockées vos bibliothèques opencv. (Answer by Cookyt)

2- Inclure le chemin des fichiers .so de votre opencv dans LD_LIBRARY_PATH ()

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

La réponse de Umair R est généralement la bonne solution pour résoudre le problème, car cette erreur était due aux liens manquants entre les bibliothèques opencv et le programme. il est donc nécessaire de spécifier la configuration ld_libraty_path . ps. le chemin habituel de la bibliothèque est supposé être:

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

J'ai essayé cela et cela a bien fonctionné.

17
Andol Li

Recherchez le dossier contenant la bibliothèque partagée libopencv_core.so.2.4 à l'aide de la ligne de commande suivante.

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

Puis j'ai eu le résultat:

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

Créez un fichier appelé /etc/ld.so.conf.d/opencv.conf et écrivez-y le chemin du dossier dans lequel le fichier binaire est stocké. Par exemple, j'ai écrit /usr/local/lib/ dans mon fichier opencv.conf . Exécutez la ligne de commande comme suit.

Sudo ldconfig -v

Essayez de relancer la commande.

9
codeislife

Ajouter ce lien:

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

Le total est:

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