compile compilar c++ ubuntu opencv g++

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