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:
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.
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.
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.
si la solución no lo ayuda, ¿puede explicarnos mejor qué espera? Muchas gracias, Julien – jmartel