c++ - compilar - opencv c ubuntu
Error de compilaciĆ³n del programa openCV "libopencv_core.so.2.4: no se puede abrir el archivo de objeto compartido: No existe tal archivo o directorio" en ubuntu 12.04 (5)
Compilé e instalé openCV 2.4.2 en ubuntu 12.04. En /usr/local/include
, puedo ver los directorios /usr/local/opencv
y /usr/local/opencv2
.
Aquí está el código que escribí:
#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;
}
Lo compilé usando esta línea de comando:
g++ DisplayImage.cpp -o DisplayImage `pkg-config opencv --cflags --libs`
No hubo errores de tiempo de compilación, sin embargo, cuando trato de ejecutar el binario resultante con /DisplayImage code.png
recibo el siguiente mensaje de error:
./DisplayImage: error while loading shared libraries: libopencv_core.so.2.4: cannot open shared object file: No such file or directory
Agrega este enlace:
/usr/local/lib/*.so.*
El total es:
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.*
Busque la carpeta que contiene la biblioteca compartida libopencv_core.so.2.4 usando la siguiente línea de comando.
sudo find / -name "libopencv_core.so.2.4*"
Entonces obtuve el resultado:
/usr/local/lib/libopencv_core.so.2.4.
Cree un archivo llamado /etc/ld.so.conf.d/opencv.conf
y escríbalo la ruta a la carpeta donde está almacenado el binario. Por ejemplo, escribí /usr/local/lib/
en mi opencv.conf
archivo. Ejecute la línea de comando de la siguiente manera.
sudo ldconfig -v
Intenta ejecutar el comando nuevamente.
La respuesta de Umair R es principalmente el movimiento correcto para resolver el problema, ya que este error solía ser causado por los enlaces faltantes entre las bibliotecas de OpenCV y el programa. por lo tanto, existe la necesidad de especificar la configuración ld_libraty_path. PD. la ruta habitual de la biblioteca se supone que debe ser:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
Lo intenté y funcionó bien.
No ha puesto la biblioteca compartida en una ubicación donde el cargador puede encontrarla. busque dentro de las carpetas /usr/local/opencv
y /usr/local/opencv2
y vea si alguno de ellos contiene alguna biblioteca compartida (los archivos comienzan en lib
y terminan generalmente en .so
). cuando los encuentre, cree un archivo llamado /etc/ld.so.conf.d/opencv.conf
y escríbale las rutas a las carpetas donde están almacenadas las bibliotecas, una por línea.
por ejemplo, si las bibliotecas se almacenaran en /usr/local/opencv/libopencv_core.so.2.4
, escribiría esto en mi archivo opencv.conf
:
/usr/local/opencv/
Entonces corre
sudo ldconfig -v
Si no puede encontrar las bibliotecas, intente ejecutar
sudo updatedb && locate libopencv_core.so.2.4
en un caparazón. No necesita ejecutar updatedb
si ha reiniciado desde la compilación de OpenCV.
Referencias
Acerca de las bibliotecas compartidas en Linux: http://www.eyrie.org/~eagle/notes/rpath.html
Acerca de agregar las bibliotecas compartidas de OpenCV: http://opencv.willowgarage.com/wiki/InstallGuide_Linux
Para hacerlo más claro (y para unirlo) tuve que hacer dos cosas mencionadas anteriormente.
1- Crea un archivo /etc/ld.so.conf.d/opencv.conf
y escribe en él las rutas de la carpeta donde están almacenadas tus bibliotecas opencv. (Respuesta de Cookyt)
2- Incluye la ruta de los archivos .so de tu opencv en LD_LIBRARY_PATH ()
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/opencv/lib