Я скомпилировал и установил 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
Вы не поместили общую библиотеку в место, где загрузчик может ее найти. загляните внутрь папок /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
dpkg -l | grep opencv
и затем sudo apt-get remove --purge libopencv4tegra
для Jetson TK1
Чтобы сделать его более понятным (и соединить его), мне пришлось сделать две вещи, упомянутые выше.
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
Ответ Umair R в основном является правильным шагом для решения проблемы, поскольку эта ошибка обычно вызывалась отсутствующими связями между opencv libs и программой. поэтому необходимо указать конфигурацию ld_libraty_path. пс. обычно путь к библиотеке должен быть:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
Я пробовал это, и он работал хорошо.
/home/myhome/anaconda3/envs/py27/lib
Найдите папку, содержащую общую библиотеку 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
Попробуйте снова запустить команду.
/usr/local/lib/
но я получил ту же ошибку, что и OP. Все, что мне нужно было сделать, это запустить sudo ldconfig -v
, мне не нужно было создавать /etc/ld.so.conf.d/opencv.conf
(из-за того, где была установлена библиотека).