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
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
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
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é.
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.
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.*