iphone - tutorial - opencv pdf
OpenCV.Framework no se compila para la arquitectura armv7s (7)
Estoy trabajando en una aplicación para iphone usando openCV framework. Todo funcionaba bien. Sin embargo, últimamente, con el lanzamiento de iOS 6 y XCode 4.5, estaba migrando mi proyecto a XCode 4.5. Al compilarlo, encontré este error:
ld: el archivo es universal (2 porciones) pero no contiene una (n) porción armv7s: /Users/jobs/iPhone_Client/workspace/MyProject/third-party/OpenCV.framework/OpenCV para arquitectura armv7s clang: error: comando linker falló con el código de salida 1 (use -v para ver la invocación)
** CONSTRUCCIÓN FALLIDA **
Los siguientes comandos de compilación fallaron: Ld build / MyProject.build / Debug-iphoneos / MyProject.build / Objects-normal / armv7s / MyProject normal armv7s (1 error)
Como entendí esto se debe a la nueva arquitectura de armv7s . OpenCV es aparentemente que no está compilando con armv7s.
¿Cómo puedo solucionar este problema?
¿Dónde puedo encontrar una nueva versión del marco que sea compatible con la arquitectura armv7s?
Y si no hay un marco compatible disponible, ¿hay alguna forma de obtener el código fuente y crear mi propia biblioteca compilada contra la nueva arquitectura? Tal vez algunos pasos rápidos sobre cómo hacerlo?
Nota: Solo para tener en cuenta que necesito la versión para armv7s, no armv7 . Gracias
Al indicar lo obvio, deberá recompilar y reconstruir la biblioteca openCV.framework y seleccionarla para armv7s.
Ajuste la biblioteca "configuración de proyecto" y "configuración de destino" antes de reconstruir. ¡buena suerte!
Clone el proyecto de Xcode para opencv y actualice el submódulo de git de opencv según README:
https://github.com/jonmarimba/OpenCV-iOS
Compruebe la configuración de compilación, asegúrese de que iOS6 y armv7s están presentes. Haga clic en construir. Ahora debería tener los archivos .a compatibles con armv7s. Acabo de intentar esto:
$ file libopencv_core.a
libopencv_core.a: Mach-O universal binary with 2 architectures
libopencv_core.a (for architecture armv7): current ar archive random library
libopencv_core.a (for architecture cputype (12) cpusubtype (11)): current ar archive random library
La última entrada es para armv7s según mi investigación hasta ahora.
Edit: La última entrada es de hecho armv7s. Ejecuté el comando de información lipo propio de Xcode:
$ xcrun -sdk iphoneos lipo -info libopencv_core.a
Architectures in the fat file: libopencv_core.a are: armv7 armv7s
Esta respuesta se basa en la dada por n9986. Como él sugirió, cloné el repositorio encontrado en
https://github.com/jonmarimba/OpenCV-iOS
Cuando lo descargué, varias referencias dentro del proyecto a diferentes bibliotecas se rompieron, lo cual era extraño pero era fácil de arreglar. Una vez que se arreglaron, se comportó exactamente como se describe en n9986, generando bibliotecas compiladas para armv7 y armv7s. Sin embargo, para mis propósitos, les pedí que se incluyeran en un marco para que pudieran ser un reemplazo del antiguo marco que he estado usando.
Anteriormente había descargado la última versión de Opencv para ios here y pasé bastante tiempo intentando modificar sus archivos cmake para compilarlos con soporte para armv7s. jonmarimba ya ha reestructurado el archivo de proyecto xcode para eliminar sus dependencias cmake, lo que hace que el cambio de la arquitectura de destino sea mucho más intuitivo. Desafortunadamente, no construye tantas bibliotecas como vienen con la compilación estándar de openCV. Agregué un nuevo objetivo al proyecto de jonmarimba para opencv_world, que es el objetivo utilizado en la versión estándar de openCV para convertirlo en un marco. Una vez que se construyó, lo usé como un reemplazo de la biblioteca estática en la estructura de archivos del marco generado por la versión estándar de openCV.
El framework que creé se puede descargar here . Funciona a la perfección para mí como reemplazo de mi opencv2.framework anterior. Sin embargo, sí noté que jonmarimba no ha convertido los objetivos para opencv_videostab, opencv_stitching o opencv_nonfree. Es posible que si usas una de esas bibliotecas mi framework no funcione para ti. Si ese es el caso, avíseme y puedo intentar configurarlos como objetivos en el proyecto xcode para usted.
Actualizar
Para compilar para otras arquitecturas, cambie la arquitectura de destino en el proyecto xcode incluido a lo que desee para la biblioteca opencv_world. Después de construirlo, ve a buscar la biblioteca que acabas de construir. Cambie el nombre de la biblioteca opencv_world a opencv2 y reemplace el archivo de biblioteca que se encuentra en el .framework con opencv_world.
Actualización2
OpenCV 2.4.3 ahora se compila con el soporte de armv7s por defecto, por lo que estas soluciones están desactualizadas.
Pase -DCMAKE_OSX_ARCHITECTURES="armv6;armv7;armv7s;i386"
a cmake cuando compile la biblioteca / framework OpenCV para iOS.
Probablemente sea posible construirlo con CMake. Hace un año tuve un problema con una biblioteca médica que quería construir para iOS. Yo podría manejar eso con CMake.
Quizás este enlace pueda ser un motor de arranque.
http://computer-vision-talks.com/2010/12/building-opencv-for-ios/
¡Buena suerte!
Siempre puedes simplemente no apuntar a armv7s, y solo apuntar a armv7. Su aplicación seguirá funcionando bien en el iPhone 5, simplemente no estará completamente optimizada para el nuevo conjunto de instrucciones.
Simplemente, cloné la fuente desde here y construí con este tutorial .
Luego obtuve opencv2.framewok que funciona con armv7, armv7s y simulator.