2011-07-28 9 views
7

Estoy trabajando en una aplicación OpenCV y mi pregunta es ¿cómo puedo implementar y distribuir la aplicación en máquinas sin desarrollo, máquinas donde OpenCV no está instalado?Implementar y distribuir aplicaciones OpenCV con Xcode4 en Mac OSX

Estoy usando Xcode4 en Mac OS X Lion con OpenCV 2.2.

gracias

+0

si la solución no lo ayuda, ¿puede explicarnos mejor qué espera? Muchas gracias, Julien – jmartel

Respuesta

1

Qué aconsejaría es utilizar un constructor de compilación multiplataforma (como un AutoTool mejorada). Uno muy común es CMake que no es tan fácil de manejar, pero no es tan difícil, no sólo una común, que es utilizado por OpenCV ...

  • 1) Escribe tu aplicación en su máquina de escribir y el desarrollo un Cmake (no se olvide de escribir una parte de usar el OpenCV Cmake)

  • 2) Proporcionar a sus archivos cmake y la biblioteca OpenCV a la máquina no desarrollo

  • 3) Construir con la escritura de la CMake aplicación en la plataforma de destino, si la escribió correctamente, puede compilar OpenCV (usando el propio OpenCV Cmake) y construir su aplicación en (con la persona que escribió)

Si quieres ir más lejos, se puede crear un asistente de instalación o un paquete con CPack con el fin de automatizar everyting.

Here is the link where you can download it

Julien,

+0

Gracias, intentaré esto. Pero quiero implementar la aplicación para personas no tecnológicas. He leído que debería ser posible copiar los archivos de la biblioteca en la carpeta de la aplicación para distribuirla en máquinas sin OpenCV. Pero esto no funciona para mí ... :( – sn3ek

+0

Por supuesto, si haces un script y utilizas un asistente de instalación, no veo por qué no sería para personas no tecnológicas ... Al menos si saben cómo hacer clic en siguiente, debería ser suficiente: p – jmartel

+1

No es necesario que el usuario final instale las bibliotecas por separado. OS X permite que las bibliotecas se integren en los paquetes de aplicaciones. Este es el enfoque "correcto" en la Mac Elimina las dependencias externas y asegura que las versiones esperadas de las bibliotecas sean las que se usan. – SSteve

4

esto es sólo una solución parcial porque yo también todavía no he encontrado la manera de hacer esto con las librerías OpenCV. (Lo descubrí. Consulte la actualización a continuación.) Pero lo he hecho con otras bibliotecas (SM2DGraphView).

Hay tres cosas que deben suceder:

  1. tiene que copiar las librerías OpenCV que su programa utiliza en el paquete de aplicaciones. Para hacerlo (en Xcode 3, de todos modos), agregue una fase de compilación Copiar archivos a su destino. Arrastre los archivos de la biblioteca de la lista de archivos de Xcode a la fase de compilación. Haga doble clic en el elemento Copiar archivos y establezca el destino en Frameworks.

    Tenga en cuenta que debe asegurarse de que la biblioteca que incluye en su proyecto Xcode es un archivo de biblioteca y no un enlace simbólico a un archivo de biblioteca. De lo contrario, solo el enlace simbólico se copiará en su paquete de aplicaciones.

  2. La ruta de instalación de los archivos de marcos de OpenCV debe establecerse en @executable_path/../Framework. Si el framework se estaba construyendo en Xcode, haría esto en la configuración del proyecto. Dado que OpenCV no se está construyendo en Xcode, debe hacerlo después del hecho con el programa de línea de comandos install_name_tool: install_name_tool -id @executable_path/../Frameworks libopencv_imgproc.2.3.1.dylib. Debería poder configurarlo en una fase de compilación ejecutar script en su destino.

  3. El archivo ejecutable necesita encontrar la biblioteca en el directorio Frameworks del paquete. Aquí es donde estoy atrapado actualmente.

actualización

me encontré con los comandos de install_name_tool correcto para obtener el programa para ver las bibliotecas (y las bibliotecas para ver las otras bibliotecas). La información en the Qt page for deploying OS X programs fue la clave.

me corrieron otool -L en el archivo ejecutable en Contenidos de directorio de mi programa/MacOS y vi esta [líneas no relevantes extraídos]:

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) 

por lo que utiliza estos comandos (mientras que en los Contenidos/directorio MacOS) para obtener el programa para buscar en el lugar correcto para las bibliotecas:

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 

Luego cambié al directorio Contenido/estructuras y utilizado estos comandos para contar las bibliotecas donde fueron instalados:

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 

Ahora la biblioteca imgproc necesita ser contada dónde encontrar la biblioteca central y highgui necesita ser contada dónde encontrar núcleo y 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 

Todavía estoy corriendo en un problema por el que highgui está buscando muchas bibliotecas en/opt/local/bin pero estoy bastante seguro de que la parte del problema OpenCV está resuelta. Ahora solo necesito poner todos estos comandos en una fase de compilación en Xcode.

Cuestiones relacionadas