Подтвердить что ты не робот

Ошибка компиляции программы openCV "libopencv_core.so.2.4: невозможно открыть файл общих объектов: нет такого файла или каталога" в ubuntu 12.04

Я скомпилировал и установил openCV 2.4.2 в ubuntu 12.04. В /usr/local/include я вижу каталоги /usr/local/opencv и /usr/local/opencv2.

Вот код, который я написал:

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

Я скомпилировал его с помощью этой командной строки:

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

Ошибок времени компиляции не было, однако, когда я пытаюсь запустить результирующий двоичный файл с помощью /DisplayImage code.png, я получаю следующее сообщение об ошибке:

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

Ответ 1

Вы не поместили общую библиотеку в место, где загрузчик может ее найти. загляните внутрь папок /usr/local/opencv и /usr/local/opencv2 и посмотрите, есть ли в них какие-либо общие библиотеки (файлы, начинающиеся с lib и обычно заканчивающиеся на .so). когда вы их найдете, создайте файл с именем /etc/ld.so.conf.d/opencv.conf и напишите ему пути к папкам, где хранятся библиотеки, по одному в каждой строке.

например, если библиотеки были сохранены в /usr/local/opencv/libopencv_core.so.2.4, то я бы записал это в мой файл opencv.conf:

/usr/local/opencv/

Затем запустите

sudo ldconfig -v

Если вы не можете найти библиотеки, попробуйте запустить

sudo updatedb && locate libopencv_core.so.2.4

в оболочке. Вам не нужно запускать updatedb, если вы перезагрузились с момента компиляции OpenCV.

Литература:

Об общих библиотеках Linux: http://www.eyrie.org/~eagle/notes/rpath.html

О добавлении общих библиотек OpenCV: http://opencv.willowgarage.com/wiki/InstallGuide_Linux

Ответ 2

Чтобы сделать его более понятным (и соединить его), мне пришлось сделать две вещи, упомянутые выше.

1- Создайте файл /etc/ld.so.conf.d/opencv.conf и напишите ему пути к папке, в которой хранятся ваши библиотеки opencv. (Answer by Cookyt)

2- Включите путь к файлам opencv .so в LD_LIBRARY_PATH()

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

Ответ 3

Ответ Umair R в основном является правильным шагом для решения проблемы, поскольку эта ошибка обычно вызывалась отсутствующими связями между opencv libs и программой. поэтому необходимо указать конфигурацию ld_libraty_path. пс. обычно путь к библиотеке должен быть:

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

Я пробовал это, и он работал хорошо.

Ответ 4

Найдите папку, содержащую общую библиотеку libopencv_core.so.2.4, используя следующую командную строку.

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

Затем я получил результат:

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

Создайте файл с именем  /etc/ld.so.conf.d/opencv.conf и напишите ему путь к папке, где хранится двоичный файл. Например, я написал /usr/local/lib/ в мой файл opencv.conf. Запустите командную строку следующим образом.

sudo ldconfig -v

Попробуйте снова запустить команду.