2010-09-28 15 views
6

cuando creo un proyecto xCode con la plantilla C++ stdC++ 'Command Line Tool', puedo incluir y compilar encabezados opencv y ejecutar algún código.¿Cómo incluir OpenCV en la aplicación Cocoa?

Pero quiero usar OpenCV en un contexto 'Cocoa Application'. Cuando se creó con esa plantilla, obtuve errores de compilación cuando incluí los encabezados de OpenCV en main.mm. (Ya cambié main.m a main.mm, el '// NSApplicationMain (argc, (const char **) argv);' está comentado)

Uno de esos errores es: "Se permiten expresiones de enunciado sólo dentro de funciones "

Supongo que es un tipo de error de versión del compilador, pero cuando comparo la configuración de compilación del proyecto no puedo encontrar diferencias.

¿Tiene alguna idea/experiencia?

Respuesta

1

Intente agregar: -lstdc++ a "Otras banderas del enlazador" en la configuración de compilación para su aplicación Cocoa.

Una aplicación de cacao hecha por las plantillas de Xcode no enlazará incluye la biblioteca C++ en su configuración por defecto.

+0

Hola, también agregó -lz, pero todavía tengo el mismo error. Estoy construyendo en i386. ¿Qué me estoy perdiendo? – Fabian

+0

¿Por qué comenta NSApplicationMain()? Deberá actualizar su pregunta con información más específica, como el mensaje de error exacto y/o un fragmento de código suficiente para obtener pistas sobre el problema. – petert

0

Probablemente le resultará más fácil usar la API C de OpenCV en lugar de la API C++. Puede llamar a las API de C directamente desde el objetivo C, por lo que esto hace que la vida sea mucho más fácil. Simplemente pierde algo del azúcar sintáctico de C++, como los valores de parámetros predeterminados.

18

Me encontré con el mismo problema, pasé 2 días haciendo un rastreo serio del sistema y, como era de esperar, la solución fue tan simple que un niño de 8 años podría haberlo encontrado más rápido que yo.

¿Listo para esto?

En el archivo .mm donde desea utilizar OpenCV, necesita hacer su #include "opencv2/opencv.hpp" ANTES de que cualquier otro incluya. ¡Eso es! Simplemente muévelo hacia arriba y observe cómo su problema desaparece mágicamente más rápido que la alfombra que realmente ató la habitación.

Esto es para OpenCV 2.2 por cierto, de ahí el nuevo archivo de inclusión. Además, si su proyecto XCode utiliza un archivo de encabezado de prefijo (busque en "Otras fuentes" un archivo "YourProjectName_Prefix.pch"), deberá colocar su #include "opencv2/opencv.hpp" allí en lugar de en cualquier otro archivo.

+1

Incluso si no hay un Prefix.pch real, la configuración de compilación del objetivo puede contener un encabezado de prefijo como el UIKit.h del sistema para todo. Después de quitar eso también, finalmente se desarrolló en mi máquina. –

2

Incluso si cambia el nombre de su "main.m" a "main.mm" y mueve el "#include opencv2/opencv.hpp" a la parte superior (en el archivo principal), el preprocesador insertará cocoa.h primero debido a los archivos de encabezado precompilados nemed algo así como "_Prefix.pch". Para evitar este tipo de problemas - eliminar la instrucción import o - insertar una instrucción import encima de la instrucción de importación Cocoa.h

3

respuesta de Ian Charnas es correcta, pero hay una modificación que haría.

Este artículo tiene una solución más específica y una explicación de por qué necesita hacer esto. http://aptogo.co.uk/2011/09/opencv-framework-for-ios/

// Añadir esta nueva sección antes de las sentencias import para UIKit y la Fundación

#ifdef __cplusplus 
    #import <opencv2/opencv.hpp> 
#endif 
1
  1. agregar esto a su.el archivo PCH

    #ifdef __cplusplus 
    #import <opencv2/opencv.hpp> 
    #endif 
    
  2. No se olvide de convertir todos sus archivos .m en archivos .MM

Cuestiones relacionadas