Я скомпилировал и установил 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
Чтобы сделать это более ясным (и собрать это вместе), я должен был сделать две вещи, упомянутые выше.
1- Создать файл /etc/ld.so.conf.d/opencv.conf
и запишите в него пути к папке, в которой хранятся ваши библиотеки opencv. (Ответ Кукайта)
2- Включите путь вашего opencv .so
файлы в LD_LIBRARY_PATH ()
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/opencv/lib
Ответ Umair R — это в основном правильный шаг для решения проблемы, так как эта ошибка раньше была вызвана отсутствием ссылок между библиотеками opencv и программой. поэтому необходимо указать конфигурацию ld_libraty_path.
пс. предполагается, что обычный путь к библиотеке:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/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/*.so.*
Итого:
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.*