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

48

Я скомпилировал и установил 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
  • 0
    По логике libopencv_core.so.2.4 должен быть в / usr / local / lib, вы можете найти его там?
  • 0
    Укажите путь, по которому файлы opencv-so расположены в LD_LIBRARY_PATH. (или ldconfig <opsncv-libs> также может помочь)
Показать ещё 1 комментарий
Теги:
opencv
g++

4 ответа

81

Вы не поместили общую библиотеку в место, где загрузчик может ее найти. загляните внутрь папок /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

  • 3
    Обычно библиотеки opencv устанавливаются в / usr / local / lib / . У меня была похожая проблема, и я решил ее, удалив предварительно скомпилированные пакеты opencv .
  • 0
    Как упоминал Томио, удаление предварительно скомпилированных пакетов решило проблему и для меня. Например. на Ubuntu L4T dpkg -l | grep opencv и затем sudo apt-get remove --purge libopencv4tegra для Jetson TK1
Показать ещё 2 комментария
19

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

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
12

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

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

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

  • 0
    в моем случае я использую Anaconda и путь это /home/myhome/anaconda3/envs/py27/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

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

  • 0
    Спасибо, работает как очарование!
  • 0
    Просто хотел войти; в моем случае библиотека была фактически установлена в /usr/local/lib/ но я получил ту же ошибку, что и OP. Все, что мне нужно было сделать, это запустить sudo ldconfig -v , мне не нужно было создавать /etc/ld.so.conf.d/opencv.conf (из-за того, где была установлена библиотека).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню