Установка и обслуживание нескольких версий OpenCV (также применимо к любой другой сторонней библиотеке)

Я пытался собрать и использовать OpenCV 2.3.0 на моей 64-битной машине Fedora15 Lovelock.

Фон:

Во-первых, на моей 64-битной Fedora15 OpenCV2.2.0, кажется, находится в местах, а именно

/usr/share/opencv  
/usr/doc  
/usr/lib64 &  
/usr/bin  

Однако я не нахожу включаемых файлов (в /usr/include). Это означает, что пакет разработки не был установлен. Мой менеджер пакетов не отображает пакеты разработки, когда я пытаюсь добавить/удалить программное обеспечение.

Мне нужно создавать приложения, некоторые из которых просто ссылаются на 2.2, а другие ссылаются на 2.3.O библиотеки OpenCV. Итак, я подумал, что лучшим решением будет иметь отдельное место для сторонних библиотек, которые я использую для мое развитие. Поэтому я создал каталог в /local с именем soft и создал каталог OpenCV. Такая структура каталогов.

 /local/soft/
            OpenCV/ 
                   OpenCV2.2.0/  
                              source-files
                              build 
                   OpenCV2.3.0/
                              source-files  
                              build
                              installation  
                                          share/opencv 
                                          doc
                                          include
                                          lib

Теперь я попытался собрать OpenCV2.3.0, и мне это удалось. Я настраиваю CMake на использование CMAKE_INSTALL_PREFIX для каталога с именем «установка» (см. выше) вместо стандартного /usr/local/. Чистый. хм?

Я попытался собрать и установить OpenCv 2.2.0 таким же образом. Увы 2.2.0 что-то жалуется при сборке. Поэтому я подумал, что дам ссылку на уже существующую версию в стандартных местах. НО, когда я пытаюсь установить пакеты dev для 2.2 с помощью моего менеджера пакетов, файлы разработки для x86_64 не найдены :-), что означает, что у меня нет заголовков для ссылки на библиотеки в стандартном месте.

Я не могу собрать свой исполняемый файл, так как компоновщик ld не найдет OpenCV, который я установил в нестандартном месте (хотя я указываю его точное местоположение, используя параметры -L и -l с gcc в моем затмении).

Вопрос 1: Правильно ли я поступаю, поддерживая установки в нестандартных местах? Является ли /usr/ стандартным местом, где менеджер пакетов всегда будет выполнять установку?

Вопрос 2: Как правильно подключить эти библиотеки, установленные в нестандартных местах? Почему ld не распознает мои файлы .so в папке lib?

sudo g++ logpolar.cpp -o logpolar.o -I /local/soft/OpenCV/opencv2.3.1/installation/include/ -l/local/soft/OpenCV/opencv2.3.1/build/lib/libopencv_core.so

Но ld не может найти -l/local/soft/OpenCV/opencv2.3.1/build/lib/libopencv_core.so

Я проверил папку lib и уверен, что там есть красивая символическая ссылка на libopencv_core.so.2.3.


person hAcKnRoCk    schedule 05.10.2011    source источник


Ответы (1)


Стандартный подход заключается в использовании структуры каталогов /usr/local, в которой уже есть предопределенные пути, такие как /usr/local/bin, /usr/local/sbin, /usr/local/include, /usr/local/lib.

Вы помещаете свое программное обеспечение здесь, и все будет JustWork(TM). Каждый дистрибутив Linux (включая Fedora) настроен таким образом, что он будет загружать программы (библиотеки, заголовочные файлы) из этих библиотек.

Если бы вы использовали набор инструментов GNU (autoconf, automake => autotools), все было бы в порядке. С CMake вам, вероятно, потребуется настроить пути для /usr/local/include и /usr/local/lib.

С другой стороны, этот подход не позволит вам использовать несколько версий. Вы можете иметь только один. Тот, что находится в /usr/local, переопределяет системный (установленный в /usr/bin), потому что эти пути идут первыми.

Вы можете сохранить свой подход, в нем нет ничего неправильного. Обычно мы помещаем такое программное обеспечение в папку /opt, поэтому вы должны указать /opt/opencv/X.Y, где X.Y — номера версий.

Q2: Прочтите справочную страницу gcc и найдите параметр -L. Вам нужно что-то вроде:

gcc ... -I/opt/opencv/2.0/include -lsystem_lib -L/opt/opencv/2.0/lib -lopencv ... ...

Не забудьте установить LD_LIBRARY_PATH при запуске программ в нескольких версиях, чтобы правильно загрузить правильную версию:

LD_LIBRARY_PATH=/opt/opencv/2.0/lib /opt/opencv/2.0/bin/opencv
person lzap    schedule 06.10.2011
comment
ХОРОШО. Я удалил все. Я собрал и заново установил OpenCV2.3.0 в стандартном месте /usr/local. К сожалению, ld по-прежнему не распознает библиотеки libopencv_core.so и libopencv_highgui.so. Даже после указания опции -L для gcc - person hAcKnRoCk; 06.10.2011
comment
Что вы подразумеваете под признанием? Если вы имеете в виду, что связанная программа не может ее найти, вам нужно изменить LD_LIBRARY_PATH, как я написал. Попробуйте также программу ldd, чтобы увидеть все зависимости. - person lzap; 06.10.2011