Развертывание и распространение приложений OpenCV с Xcode4 на Mac OSX - PullRequest
7 голосов
/ 28 июля 2011

Я работаю над приложением OpenCV, и мой вопрос заключается в том, как я могу развернуть и распространить приложение на машинах, не предназначенных для разработки, на машинах, на которых OpenCV не установлен?

Я использую Xcode4 на Mac OS X Lion с OpenCV 2.2.

спасибо

Ответы [ 2 ]

4 голосов
/ 29 июля 2011

Это только частичный ответ, потому что я также еще не понял, как это сделать с библиотеками OpenCV. ( Разобрался. См. Обновление ниже. ) Но я сделал это с другими библиотеками ( SM2DGraphView ).

Есть три вещи, которые должны произойти:

  1. Вам необходимо скопировать библиотеки OpenCV, которые использует ваша программа, в комплект приложений. Чтобы сделать это (в Xcode 3, в любом случае), добавьте фазу сборки Copy Files к своей цели. Перетащите файлы библиотеки из списка файлов Xcode на этап сборки. Дважды щелкните элемент «Копировать файлы» и установите место назначения в Frameworks.

    Обратите внимание, что вам необходимо убедиться, что библиотека, включенная в ваш проект Xcode, является файлом библиотеки, а не символической ссылкой на файл библиотеки. В противном случае в ваш пакет приложений будет скопирована только символическая ссылка.

  2. Путь установки файлов каркаса OpenCV должен быть установлен на @executable_path/../Framework. Если бы фреймворк был построен в XCode, вы бы сделали это в настройках проекта. Поскольку OpenCV не встроен в XCode, вам нужно сделать это после факта с помощью программы командной строки install_name_tool: install_name_tool -id @executable_path/../Frameworks libopencv_imgproc.2.3.1.dylib. Вы должны быть в состоянии настроить это на этапе сборки Run Script в вашей цели.

  3. Исполняемый файл должен найти библиотеку в каталоге Frameworks пакета. Вот где я сейчас застрял.

Обновление

Я нашел правильные команды install_name_tool, чтобы программа увидела библиотеки (и библиотеки, чтобы увидеть другие библиотеки). Информация на странице Qt для развертывания программ OS X была ключевой.

Я запустил otool -L для исполняемого файла в каталоге Contents / MacOS моей программы и увидел [удаленные несоответствующие строки]:

lib/libopencv_core.2.3.dylib (compatibility version 2.3.0, current version 2.3.1)
lib/libopencv_imgproc.2.3.dylib (compatibility version 2.3.0, current version 2.3.1)
lib/libopencv_highgui.2.3.dylib (compatibility version 2.3.0, current version 2.3.1)

Поэтому я использовал эти команды (находясь в каталоге Contents / MacOS), чтобы программа выглядела в нужном месте для библиотек:

install_name_tool -change lib/libopencv_core.2.3.dylib @executable_path/../Frameworks/libopencv_core.2.3.1.dylib CocoaCVTest 
install_name_tool -change lib/libopencv_imgproc.2.3.dylib @executable_path/../Frameworks/libopencv_imgproc.2.3.1.dylib CocoaCVTest 
install_name_tool -change lib/libopencv_highgui.2.3.dylib @executable_path/../Frameworks/libopencv_highgui.2.3.1.dylib CocoaCVTest 

Затем я перешел в каталог Contents / Frameworks и использовал эти команды, чтобы сообщить библиотекам, где они были установлены:

install_name_tool -id @executable_path/../Frameworks/libopencv_core.2.3.1.dylib libopencv_core.2.3.1.dylib
install_name_tool -id @executable_path/../Frameworks/libopencv_imgproc.2.3.1.dylib libopencv_imgproc.2.3.1.dylib
install_name_tool -id @executable_path/../Frameworks/libopencv_highgui.2.3.1.dylib libopencv_highgui.2.3.1.dylib

Теперь библиотеке imgproc нужно указать, где найти библиотеку ядра, а highgui - где найти ядро ​​и imgproc:

install_name_tool -change lib/libopencv_core.2.3.dylib @executable_path/../Frameworks/libopencv_core.2.3.1.dylib libopencv_imgproc.2.3.1.dylib
install_name_tool -change lib/libopencv_core.2.3.dylib @executable_path/../Frameworks/libopencv_core.2.3.1.dylib libopencv_highgui.2.3.1.dylib 
install_name_tool -change lib/libopencv_imgproc.2.3.dylib @executable_path/../Frameworks/libopencv_imgproc.2.3.1.dylib libopencv_highgui.2.3.1.dylib 

Я все еще сталкиваюсь с проблемой, когда highgui ищет много библиотек в / opt / local / bin, но я довольно уверен, что часть проблемы OpenCV решена. Теперь мне просто нужно получить все эти команды на этапе сборки в XCode.

1 голос
/ 28 июля 2011

Я бы посоветовал использовать кросс-платформенный компилятор (например, улучшенный автоинструмент).Очень распространенным является CMake, который не так прост в обращении, но не так сложен, не только распространен, он используется OpenCV ...

  • 1)свою машину разработки и напишите Cmake (не забудьте написать часть для использования OpenCV Cmake)

  • 2) Предоставьте файлы cmake и библиотеку opencv на машину, не предназначенную для разработки

  • 3) Создайте с помощью сценария CMake приложение на целевой платформе, если вы написали его правильно, оно может собрать opencv (используя собственный OpenCV Cmake) и построить ваше приложение (с помощью одногоВы писали)

Если вы хотите пойти дальше, вы можете создать мастер установки или пакет с CPack для автоматизации каждого.

Вотпо ссылке можно скачать

Julien,

...